алгоритм определения координат пикселя на окружности окружности

как узнать значение пикселя в определенной степени на окружности круга, если я знаю координаты пикселя центра круга, радиус круга и перпендикулярный угол. В основном, я пытаюсь нарисовать стрелки часов в разное время (1 час, 2 часа и т.д.)


person Surya    schedule 29.05.2009    source источник


Ответы (5)


Пусть h будет часом в виде числа с плавающей запятой (h=2.25 будет 02:15 и т. д.) между 0 и 12. (cX,cY) — это координаты центра. hLength и mLength - длина часовой и минутной стрелок.

// Hour hand
hAngle = 2.0*Pi*h/12.0; // 0..12 mapped to 0..2*Pi
hX = cX + hLength * sin(hAngle);
hY = cY - hLength * cos(hAngle);

// Min hand
mAngle = 2.0*Pi*h; // 0..1 mapped to 0..2*Pi, etc.
mX = cX + mLength * sin(mAngle);
mY = cY - mLength * cos(mAngle);
person Eric Bainville    schedule 29.05.2009

Где центр круга равен (X0, Y0), радиус равен R, а угол с осью X равен тета:

X1 = (R * cos theta) + X0

и

Y1 = (R * sin theta) + Y0
person avstrallen    schedule 29.05.2009
comment
Это не должно быть проголосовано так высоко. Похоже, он не знает ценности тэты. Ответ Эрика Бейнвилля более полный. - person jmucchiello; 29.05.2009
comment
@jmucchiello - Не уверен, что понял вас... нас попросили алгоритм, и я дал описание функции с формальными параметрами. На данном этапе никто не знает «ценность» теты! Если вы имеете в виду, что я не рассчитывал коэффициенты масштабирования для движения стрелок часов и угол в радианах для каждого из часовых тиков, вы абсолютно правы, я этого не делал. У меня есть работа по написанию собственного кода! - person avstrallen; 29.05.2009
comment
Да, кажется, я задал 2 вопроса в одном. Ваш ответ идеально подходит для первой части. Спасибо. - person Surya; 29.05.2009

Если (x1,y1) — точка на окружности, а (x,y) — центр, то x1 = x + r * cos(angle) и y1 = y + r * sin(angle)

person Naveen    schedule 29.05.2009
comment
Обратите внимание, что это предполагает стандартную математическую систему координат, где Y увеличивается вверх. В типичной 2D компьютерной графике это инвертируется (чтобы Y увеличивался с адресом пикселя). - person unwind; 29.05.2009
comment
Это справедливо только для круга с центром в ориго. - person ralphtheninja; 29.05.2009
comment
Просто добавьте координаты центра. - person Svante; 29.05.2009

если центр находится в точках x0, y0 и 0,0 iz в нижнем левом углу, то 1 час находится в точке x0 + rsin(2π/3), y0+rcos(2π/ 3).

person Slartibartfast    schedule 29.05.2009

Нарисуйте линии от центра к координатам, вычисленным с помощью sin для координаты y и cos для координат x (оба умножаются на длину руки).

В Википедии есть дополнительная информация о том, как sin и cos "работают".

person Lucero    schedule 29.05.2009