Найти точки по кругу

Мы кодируем на C ++, имеем полукруг, начиная с определенной точки (например, (0,-310)) и заканчивая в определенный момент (0,310), У нас есть радиус, и у нас есть уравнение X^2 + Y^2 = r^2, Сейчас мы пытаемся вычислить несколько (скажем, 10+) точек на линии этого круга.

Следовательно, мы пытаемся создать приращение, которое будет вычислять значения Y / X между этими точками, используя уравнение, показанное выше, чтобы убедиться, что все вычисленные точки находятся на линии круга.

Получив эти точки, мы пытаемся объединить их в несколько сложных уравнений, чтобы вычислить углы руки робота, которая должна нарисовать эту форму. Это на самом деле не приоритет, но я подумал, что должен включить в этот вопрос нашу общую цель.

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

это это то, к чему мы стремимся, чтобы вычислить точки, выделенные жирным шрифтом.

4

Решение

Должны ли точки быть равномерно распределены? Если нет, то вы можете просто использовать формулу напрямую:

// assume half-circle centered at (0,0) and radius=310
double r = 310.0;
int n = 10;
for( int i=0; i<n; i++ )
{
double x = i*r/n;
double y = sqrt( r*r - x*x );
// both (x,y) and (x,-y) are points on the half-circle
}

Как только это сработает, вы также можете поиграть с распределением значений x, чтобы приблизить равномерное расстояние вокруг круга.

Если ваш круг не по центру (0,0) затем просто сместить вычисленное (x,y) по фактическому центру.

3

Другие решения

Точки круга можно определить по формулам:

x = radius * cos(angle)
y = radius * sin(angle)

Вам нужно будет определить часть, часть или дугу круга, который вы рисуете, и определить начальный угол и конечный угол.

В противном случае, ищите в SO и в Интернете «алгоритм рисования дуги c ++».

4

Вы можете сделать это, изменив свое уравнение на Тета (угол) следующим образом:
X = X0 + Cos (Theta) * r
Y = Y0 + Sin (Theta) * r

в то время как в вашем случае (X0, Y0) = (0,0), r = 310 и диапазон тета находится в диапазоне от -180 до 180 (если ваш cos и sin в градусах) или между -Phi — Phi (если cos и sin в радиусах ).

Теперь, если вы хотите получить 10 баллов, вам нужно взять тета-диапазон и разделить его на 10 и cal X, Y для каждого из этих значений.

0
По вопросам рекламы [email protected]