как узнать значение пикселя в определенной степени на окружности круга, если я знаю координаты пикселя центра круга, радиус круга и перпендикулярный угол. В основном, я пытаюсь нарисовать стрелки часов в разное время (1 час, 2 часа и т.д.)
алгоритм определения координат пикселя на окружности окружности
Ответы (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
Это не должно быть проголосовано так высоко. Похоже, он не знает ценности тэты. Ответ Эрика Бейнвилля более полный.
- person jmucchiello; 29.05.2009
@jmucchiello - Не уверен, что понял вас... нас попросили алгоритм, и я дал описание функции с формальными параметрами. На данном этапе никто не знает «ценность» теты! Если вы имеете в виду, что я не рассчитывал коэффициенты масштабирования для движения стрелок часов и угол в радианах для каждого из часовых тиков, вы абсолютно правы, я этого не делал. У меня есть работа по написанию собственного кода!
- person avstrallen; 29.05.2009
Да, кажется, я задал 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
Обратите внимание, что это предполагает стандартную математическую систему координат, где Y увеличивается вверх. В типичной 2D компьютерной графике это инвертируется (чтобы Y увеличивался с адресом пикселя).
- person unwind; 29.05.2009
Это справедливо только для круга с центром в ориго.
- person ralphtheninja; 29.05.2009
Просто добавьте координаты центра.
- 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