2016-04-26 3 views
0

Я ищу, чтобы получить список точек n точки на дуге; Я буду знать начальную точку, конечную точку и радиус.Нарисуйте дугу от начальной точки, конечной точки и радиуса

Пользователь будет строить дугу с тремя щелчками мыши, первые два для определения начала и конца, а третий - для установки размера радиуса.

Спасибо.

Редактировать: Мне не нужно просто визуализировать его - мне также нужен список точек, поэтому использование API-интерфейса рендеринга для этого не сократит его.

+0

Возможная Дубликат [Начертите дугу на основе 2 точек и радиуса] (http://stackoverflow.com/questions/11387493/draw-an-arc-based-on-2-points-and -radius) – TaW

+0

Обычно в таких языках, как C# и Java, стандартные библиотеки включают API-интерфейс чертежа, поэтому вам не нужно самостоятельно определять алгоритм окраски пикселей; вам просто нужно обработать взаимодействие с пользователем и сделать рисунок через библиотеку. – adv12

+0

@TaW Я добавил Java и C#, потому что я знаю, что оба языка достаточно, чтобы конвертировать из одного и другого. И, очевидно, точки будут основываться на переменной, что-то вроде сегментов. Честно говоря, на самом деле нет необходимости быть настолько высокомерным. – Questioning

ответ

1

Пусть h будет половина расстояния между начальной и конечной точками. По Пифагору расстояние от середины и центра круга равно w=√r²-h². Вы найдете этот центр, вычерчивая сегмент линии длиной w перпендикулярно от середины.

Начальный угол дуги задается tan(φ)=δy/δx, между начальной точкой и центром и аналогичным для конечной точки.

Тогда ваши n точки имеют координаты

Xc + r cos(φs + k (φe-φs)/(n-1)) 
Yc + r sin(φs + k (φe-φs)/(n-1)) 

для k= 0,1,...n-1.

enter image description here

+0

Просто уточнить; delta y и delta x представлены углом между S и C и E и C? Если бы я увеличил расстояние до C, это также увеличило бы угол круга, правильно? – Questioning

+0

@Questioning: «увеличить расстояние до C», что вы имеете в виду? –

+0

Я просто отвечу вам сюда вместо другого места и скажу вам, чего я хочу. S и E устанавливаются с первым и вторым щелчками. Затем последний щелчок должен установить угол кривой, если это имеет смысл. Большее расстояние будет иметь больший угол. Пример. Если третий клик находится в том же месте, что и второй, угол должен быть 0, поэтому отображаемая дуга должна быть прямой. Так что я ищу, какая переменная будет контролировать это. – Questioning

0

В зависимости от языка у него может быть функция для рисования дуг, что, безусловно, намного проще, чем рисовать ее самостоятельно.

Если вы хотите получить список точек, равномерно распределенных по дуге, вычислить значение угла и использование (1/п) -й это значение для создания точек с помощью уравнения, полученного в следующей статье -

https://en.wikipedia.org/wiki/Rotation_of_axes#Derivation

более высокое значение 'n', тем больше очков вы получаете. Вы также можете посмотреть на следующей статье -

https://en.wikipedia.org/wiki/Midpoint_circle_algorithm

Смежные вопросы