Собственно сам ворпос:Как нарисовать !!точками!! круг или дугу(с помощью функции PutPixel?) в Паскале?
Добавлено через 1 мин.
хотя-бы принцып!
Собственно, переходим в полярную систему координат... Как нарисовать окружность в полярной системе? Правильно, Phi изменяем от 0 до 360 с нужным тебе шагом, R остается неизменным. Все что тебе осталось - это вот тут:
http://forum.pascal.net.ru/index.php?s=&showtopic=15345&view=findpost&p=89214
взять процедуру перевода координат из полярной СК в декартову, и отрисовать точки
хе-хе.А сколько лет мне далжно быть чтоб лазить в этом форуме?(А так : спосибо)
у меня сейчас немного похожая задача возникает, поетому я тут обдумывал много способов...
если тебя пугает полярная система координат или тригонометрия, то круг можна нарисовать так
, где А и С произвольные точки, а О центр с заданными координатами.
1)найти координаты точки А
нам нужна любая начальная точка... для этого выражаем одну координату через другое(уравнение длины отрезка), а вторую координату оставляем такой как есть
2)Шаг
нам необходимо выбрать шаг(длинна АС)
если шаг задается в длине дуги(а не отрезка), то находим длину отрезка(через пи).
3)треугольник АСО
выражаем длинны АС и СО
4)система уравнений
2 уравнения, 2 неизвестных. решаем...
рисуем точку в получиных координатах
ЗЫ так как использовались уравнения 2-го порядка будут моменты когда надо будет делать выбор... но в круге это не важно
ЗЗЫ если пространство трехмерное то необходима еще одна точка(например точка напротив А) для третьего уравнения.
ЗЗЗЫ( ) будут вопросы пиши...
а моно-ли не использовать шаг... а определить его с помощью угла?(насчёт предыд.сообщения :я перешёл в девятый) .Дело в том что основная моя задача создать массив точек в ТРЁХ измерениях ,использовать какую-нибудь из них как ось и прокрутить всё это вокруг неё. Я уже писал нечто подобное в алгоритмах но там мне указали на квантерионы(так они наз.?) и всё.Я почитал статьи-обалдел .... и понял что сначала-бы хорошо разобраться в 2D . Тут мне в голову пришла мысль что наверно круг рисуют через градус и я решил написать об этом здесь .... (это неправильно-сам понял) .в общем вот в чём дело: что такое угол в координатной системе? знаем что есть ось О (x,y) ,точка А (x,y) и угол (любой )....расстояние между ними(точкой О и А ) сохраняется....h-h-h-h-h-e-e-e-e-e-e-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-l-p!!! как я понимаю тут есть точка (например) С в которую переходит А, какое-то их отношение будет равно углу .... эххххх
Добавлено через 4 мин.
а так спасибо
uses graph;
function get_x(const x: single; const r: integer): single;
begin
get_x := r * sin(x / 180 * pi);
end;
function get_y(const y: single; const r: integer): single;
begin
get_y := r * cos(y / 180 * pi);
end;
procedure draw_circle(const radius, cx, cy, color: integer);
var
angle: single;
begin
angle := 0;
while (angle < 360) do begin
putpixel(round(cx + get_x(angle, radius)), round(cy - get_y(angle, radius)), color);
angle := angle + 1;
end;
end;
var
gd, gm: integer;
begin
gd := detect;
initgraph(gd, gm, '');
draw_circle(50, getmaxx div 2, getmaxy div 2, red);
draw_circle(30, getmaxx div 2 + 100, getmaxy div 2 - 100, white);
readln;
closegraph();
end.
Странно, что никто не вспомнил алгоритм Брезенхама для рисования окружности. Вот подробное описание вместе с реализацией на Паскале: http://virlib.eunnet.net/mif/text/n0498/4.html
Вот смотри-эллипс не только отрисовывается по точкам,
но и вращается. Как реализовывать систему координат, объяснял на форуме volvo.
program El;
uses crt,graph;
var gd, gm, X0, Y0: Integer;
X,Y,cX,cY,a,b,i,angl: Real;
begin
gd := detect;
initgraph(gd, gm, '');
X0:=320; Y0:=240; i:=0;
a:=50; b:=150; angl:=0;
repeat
while i<360 do
begin
i:=i+0.5;
cX:=a*cos(i);
cY:=b*sin(i);
X:=X0+cX*cos(angl)-cY*sin(angl);
Y:=Y0+cX*sin(angl)+cY*cos(angl);
PutPixel(Round(X), Round(Y), 15);
end;
Delay(200); i:=0;
ClearDevice; angl:=angl+0.01;
until keypressed;
closegraph;
end.
while i<360 do,
ClearDevice;и
angl:=angl+0.01;