ВУЗ:
Составители:
37
x = x_n;
y = y_n;
codx = x;
cody = y;
f = 0; /* Установка начальных значений внутренних
переменных */
/* Вычисление начального угла по значениям x_n, y_n, I, J */
if(x_n == I && y_n > J)
a_n = PI / 2;
if(x_n == I && y_n < J)
a_n = 3 * PI / 2;
if(x_n > I)
a_n = atan((y_n - J) / (x_n - I));
if(x_n < I)
a_n = PI + atan((y_n - J) / (x_n - I));
/* Вычисление конечного угла по значениям x_k, y_k, I, J */
if(x_k == I && y_k > J)
a_k = PI / 2;
if(x_k == I && y_k < J)
a_k = 3 * PI / 2;
if(x_k > I)
a_k = atan((y_k - J) / (x_k - I));
if(x_k < I)
a_k = PI + atan((y_k - J) / (x_k - I));
da = a_n - a_k; /* Вычисление угла поворота */
L = floor(4 * r * fabs(da) / PI + 0.5); /* Вычисление длины
пути по дуге */
l = 0; /* Установка текущей длины пути в 0 */
printf("init: r=%d, a_n=%f, a_k=%f, da=%f, L=%d\n", r, a_n,
a_k, da, L); /* Вывод на экран результатов инициализации */
}
/* Функция расчета очередного шага алгоритма оценочной функции
*/
void circle() {
/* Вычисление разницы между текущими координатами и центром
окружности */
X = x – I;
Y = y - J;
/* Вычисление нового значения оценочной функции и перемещение по
соответствующим осям в зависимости от текущих координат и
текущего значения оценочной функции */
if(abs(X) >= abs(Y) && SGN(f) * SGN(X) * SGN(Y) == SGN(da))
{
y = y - SGN(X) * SGN(da); /* Изменение координаты
y */
f = f - 2 * Y * SGN(X) * SGN(da) + 1; /* Изменение
значения оценочной функции */
x = x_n; y = y_n; codx = x; cody = y; f = 0; /* Установка начальных значений внутренних переменных */ /* Вычисление начального угла по значениям x_n, y_n, I, J */ if(x_n == I && y_n > J) a_n = PI / 2; if(x_n == I && y_n < J) a_n = 3 * PI / 2; if(x_n > I) a_n = atan((y_n - J) / (x_n - I)); if(x_n < I) a_n = PI + atan((y_n - J) / (x_n - I)); /* Вычисление конечного угла по значениям x_k, y_k, I, J */ if(x_k == I && y_k > J) a_k = PI / 2; if(x_k == I && y_k < J) a_k = 3 * PI / 2; if(x_k > I) a_k = atan((y_k - J) / (x_k - I)); if(x_k < I) a_k = PI + atan((y_k - J) / (x_k - I)); da = a_n - a_k; /* Вычисление угла поворота */ L = floor(4 * r * fabs(da) / PI + 0.5); /* Вычисление длины пути по дуге */ l = 0; /* Установка текущей длины пути в 0 */ printf("init: r=%d, a_n=%f, a_k=%f, da=%f, L=%d\n", r, a_n, a_k, da, L); /* Вывод на экран результатов инициализации */ } /* Функция расчета очередного шага алгоритма оценочной функции */ void circle() { /* Вычисление разницы между текущими координатами и центром окружности */ X = x – I; Y = y - J; /* Вычисление нового значения оценочной функции и перемещение по соответствующим осям в зависимости от текущих координат и текущего значения оценочной функции */ if(abs(X) >= abs(Y) && SGN(f) * SGN(X) * SGN(Y) == SGN(da)) { y = y - SGN(X) * SGN(da); /* Изменение координаты y */ f = f - 2 * Y * SGN(X) * SGN(da) + 1; /* Изменение значения оценочной функции */ 37
Страницы
- « первая
- ‹ предыдущая
- …
- 35
- 36
- 37
- 38
- 39
- …
- следующая ›
- последняя »