Мы кодируем на C ++, имеем полукруг, начиная с определенной точки (например, (0,-310)
) и заканчивая в определенный момент (0,310)
, У нас есть радиус, и у нас есть уравнение X^2 + Y^2 = r^2
, Сейчас мы пытаемся вычислить несколько (скажем, 10+) точек на линии этого круга.
Следовательно, мы пытаемся создать приращение, которое будет вычислять значения Y / X между этими точками, используя уравнение, показанное выше, чтобы убедиться, что все вычисленные точки находятся на линии круга.
Получив эти точки, мы пытаемся объединить их в несколько сложных уравнений, чтобы вычислить углы руки робота, которая должна нарисовать эту форму. Это на самом деле не приоритет, но я подумал, что должен включить в этот вопрос нашу общую цель.
Как создать приращение, чтобы вычислить все координаты на линии полукруга между нашими двумя начальными точками?
Затем поместите эти значения в уравнения в коде выше, чтобы вычислить углы руки робота. ищем способ сделать это без вычисления каждой точки индивидуально, то есть создать приращение, которое сделает это за один раз.
это это то, к чему мы стремимся, чтобы вычислить точки, выделенные жирным шрифтом.
Должны ли точки быть равномерно распределены? Если нет, то вы можете просто использовать формулу напрямую:
// 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)
по фактическому центру.
Точки круга можно определить по формулам:
x = radius * cos(angle)
y = radius * sin(angle)
Вам нужно будет определить часть, часть или дугу круга, который вы рисуете, и определить начальный угол и конечный угол.
В противном случае, ищите в SO и в Интернете «алгоритм рисования дуги c ++».
Вы можете сделать это, изменив свое уравнение на Тета (угол) следующим образом:
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 для каждого из этих значений.