2009-05-29 4 views
7

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

ответ

18

Пусть 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); 
3

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

+0

Обратите внимание, что это предполагает стандартную «математическую» систему координат, где Y увеличивается вверх. В типичной 2D компьютерной графике, которая инвертирована (чтобы Y увеличивался с адресом пикселя). – unwind

+0

Это справедливо только для круга с центром в ори. – ralphtheninja

+0

Просто добавьте координаты центра. – Svante

0

, если центр находится в x0, y0, и 0,0 из- в нижнем левом углу, а затем 1:00 находится в точке х0 + г Sin (2π/3), у0 + г cos (2π/3).

8

В случае, если центр окружности (X0, Y0), радиус R и угол с осью х является тета:

X1 = (R * cos theta) + X0 

и

Y1 = (R * sin theta) + Y0 
+0

Это не должно быть так высоко оценено. Похоже, он не знает значения тэта. Ответ Эрика Бэйнвиля более полный. – jmucchiello

+0

@jmucchiello - Не уверен, что я вас понимаю ... нас попросили найти алгоритм, и я дал описание функции с формальными параметрами. На этом этапе никто не знает «ценности» тета! Если вы имеете в виду, что я не вычислял коэффициенты масштабирования для движения рук часов, а угол в радианах для каждого из часовых тиков, вы абсолютно правы, я этого не делал. У меня есть работа над написанием собственного кода! – avstrallen

+1

Да, наверное, я задал два вопроса в одном. Ваш ответ идеально подходит для первой части. Спасибо. – Surya

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