Как рассчитать точку на окружности круга? - PullRequest
205 голосов
/ 08 мая 2009

Как можно реализовать следующую функцию на разных языках?

Рассчитайте точку (x,y) на окружности круга, учитывая входные значения:

  • Радиус
  • Угол
  • Origin (необязательный параметр, если поддерживается языком)

Ответы [ 3 ]

546 голосов
/ 08 мая 2009

Параметрическое уравнение для круга равно

x = cx + r * cos(a)
y = cy + r * sin(a)

Где r - радиус, cx, cy начало координат и a угол.

Это довольно легко адаптировать к любому языку с основными функциями триггера. Обратите внимание, что большинство языков будут использовать радианы для угла в тригонометрических функциях, поэтому вместо циклического отклонения до 0,360 градуса вы будете циклически проходить через радианы с шагом 0,2 ПИ.

45 голосов
/ 08 мая 2009

Вот моя реализация в C #:

    public static PointF PointOnCircle(float radius, float angleInDegrees, PointF origin)
    {
        // Convert from degrees to radians via multiplication by PI/180        
        float x = (float)(radius * Math.Cos(angleInDegrees * Math.PI / 180F)) + origin.X;
        float y = (float)(radius * Math.Sin(angleInDegrees * Math.PI / 180F)) + origin.Y;

        return new PointF(x, y);
    }
16 голосов
/ 08 мая 2009

Кому нужен триг, если у вас есть комплексные числа :

#include <complex.h>
#include <math.h>

#define PI      3.14159265358979323846

typedef complex double Point;

Point point_on_circle ( double radius, double angle_in_degrees, Point centre )
{
    return centre + radius * cexp ( PI * I * ( angle_in_degrees  / 180.0 ) );
}
...