найти точку на круге по степени? - PullRequest
8 голосов
/ 08 июня 2011

Допустим, у нас есть система координат 100x100, как показано ниже.0,0 - его левый верхний угол, 50,50 - его центральная точка, 100,100 - его нижний правый угол и т. Д.

Теперь нам нужно провести линию от центра наружу.Мы знаем угол наклона линии, но нужно рассчитать координаты ее конечной точки. Как вы думаете, что будет лучшим способом сделать это?

Например, если угол линии равен 45 градусам, координаты ее конечной точки будут примерно равны 75,15.

enter image description here

Ответы [ 3 ]

10 голосов
/ 08 июня 2011

Вам необходимо использовать тригонометрические функции sin и cos.

Примерно так:

theta = 45
// theta = pi * theta / 180      // convert to radians.
radius = 50
centerX = 50
centerY = 50
p.x = centerX + radius * cos(theta)
p.y = centerY - radius * sin(theta)

Имейте в виду, что большинство реализаций предполагают, что вы работаете с радианами, и положительный у указывает вверх.

3 голосов
/ 08 июня 2011

Используйте единичный круг для вычисления X и Y, но, так как ваш радиус равен 50, умножьте на 50

http://en.wikipedia.org/wiki/Unit_circle

Добавить смещение (50,50) и Боб - твой дядя

X = 50 + (cos(45) * 50) ~ 85,36
Y = 50 - (sin(45) * 50) ~ 14,65

Выше 45 градусов.

РЕДАКТИРОВАТЬ: только что увидел, что ось Y инвертируется

2 голосов
/ 08 июня 2011

Сначала вы захотите вычислить координаты X и Y, как если бы круг был единичным кругом (радиус 1).Координата X данного угла задается cos(angle), а координата Y задается sin(angle).Большинство реализаций sin и cos принимают свои входные данные в радианах, поэтому необходимо преобразование (1 градус = 0,0174532925 радиан).Теперь, поскольку ваша система координат на самом деле не является единичным кругом, вам нужно умножить результирующие значения на радиус вашего круга.В данном случае вы умножите на 50, поскольку ваш круг расширяется на 50 единиц в каждом направлении.Наконец, при использовании системы координат единичного круга предполагается, что ваш круг центрирован в начале координат (0,0).Чтобы учесть это, добавьте (или вычтите) смещение вашего центра из ваших вычисленных координат X и Y.В вашем сценарии смещение от (0,0) равно 50 в положительном направлении X и 50 в отрицательном направлении Y.

Например:

cos(45) = x ~= .707
sin(45) = y ~= .707

.707*50 = 35.35

35.35+50 = 85.35
abs(35.35-50) = 14.65

Таким образом, координатыконечный сегмент будет (85.35, 14.65).

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

edit: упс, сначала использовались градусы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...