var
x,y,r,n,dn: real;
x1,y1: Integer;
begin
x := 100;
y := 100;
r := 50;
dn := 1/r;
n:=0;
while n < 2*pi do begin
x1 := Round(x + r*cos(n));
y1 := Round(y + r*sin(n));
PutPixel(x1, y1, 15);
n := n + dn;
end;
end;
рисование круга по точкам
как нарисовать круг радиуса r с цнтром в точке O (x:x) по точкам?
С помощью формулы окружности.
(x-a)^2 + (y-b)^2 = R^2
a и b - абсцисса и ордината центра окружности, R - радиус окружности.
Вырази у через х, подставь координаты центра и изменяй в цикле значение x. Для каждого значения х получаешь два значения у, то есть рисуешь сразу две точки.
Я точно не уверено, но, кажется, это в полярных координатах:
n:=-pi/1000;
repeat
n:=n+pi/1000;
x1:=r*cos(n);
y1:=r*sin(n);
putpixel(x+x1,y+y1,15);
until n>=2*pi;
Я точно не уверено, но, кажется, это в полярных координатах:
n:=-pi/1000;
repeat
n:=n+pi/1000;
x1:=r*cos(n);
y1:=r*sin(n);
putpixel(x+x1,y+y1,15);
until n>=2*pi;[/QUOTE]
если бы окружность, линия, эллипс рисовались бы таким способом, никаких мощностей видеокарт не хватило бы даже на дряхленький HL2. Спасибо Брезенхему за его чудо алгоритм.
И когда это HL2 стал дряхленьким? У меня на бывгем 450-м целероне GF2 mx200 на минимуме кое-как шевелился. Вот кто дряхлый, так это wolf3d, однако, как там что на экран выводится, сказать не могу
я это к тому, что люди хотят сделать 'как попало', а не 'как следует'
просто dn както странно определяется (pi/1000).... обычно оно определялось как полный_оборот/длину_окружности.... после преобразований dn := 1/r
Господа, окружность - вещь симметричная, следовательно, если точка с координатаим (x, y) лежит на окружности, то точки с координатами (x, -y), (-x, y) и (-x, -y) тоже лежат на зтой окружности, а отседова вытекает, что надо считать от 0 до pi/2.
А если не привязываться сразу к координатам центра окружности (X,Y), то можно и от 0 до pi/4, при этом меняя x с y.
Так речь идет о круге или все же об окружности?
ТОлько вот зачем рисовать окружность самому? Есть готовые функции в соответствующих библиотеках...