Рисование круга с помощью уравнения Пифагора

Я должен нарисовать круг со следующим кодом
(проверьте, находится ли точка на окружности).

int rad=10;
// i=x,j=y
for (int j=ymid-rad;j<=ymid+rad;j++){
for (int i=xmid-rad;i<=xmid+rad;i++){
if (((i-xmid)*(i-xmid)+(j-ymid)*(j-ymid)) == rad*rad)
Image1->Canvas->Pixels[i][j]=clRed;
}
}

Однако он рисует только несколько точек круга.
Что я делаю неправильно?

Спасибо.

0

Решение

Вы делаете все это в целочисленной арифметике; имеются очень мало целочисленных решений в x^2 + y^2 == r^2 (для фиксированной r).

Я предлагаю использовать что-то вроде алгоритм окружности средней точки вместо.

3

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

Версия на основе диапазона будет работать так:

bool RangeCheck(float val, float r1, float r2) {
return val >= r1 && val <= r2;
}
bool Circle(float x, float y, float rad) {
return RangeCheck(sqrtf(x*x+y*y), rad-0.8, rad+0.8);
}
bool CircleWithCenter(float x, float y, float cx, float cy, float rad) {
x-=cx; y-=cy;
return Circle(x,y,rad);
}

Этот диапазон диапазона позволяет рисовать изолинии в прогнозах погоды, но работает и для кругов.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector