Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.31;
Скачать: CL | DM;

Вниз

Круг   Найти похожие ветки 

 
RimD   (2003-01-30 21:45) [0]

Кто знает, как по точкам вывести на канвас круг, т.е. по какой формуле...


 
konstantinov   (2003-01-31 01:02) [1]

Геометрию учить надо!
(R/(X*X))+(R/(Y*Y))=0; - в декартовых координатах;
:)


 
Artem Grischenko   (2003-01-31 06:58) [2]

Я бы сказал, что тебе тоже не помешает поучить геометрию ;-)
x*x + y*y = r*r

=>

(R/x*x))+(R/(y*y))= 1


 
MBo   (2003-01-31 07:09) [3]

Затейников все больше ;)


 
Anatoly Podgoretsky   (2003-01-31 07:45) [4]

Ищи алгоритмы Брезенхема


 
Chubais   (2003-01-31 09:04) [5]


> MBo © (31.01.03 07:09)

точна!


 
Bober23   (2003-01-31 09:25) [6]

procedure DrawCircle(aCanvas:TCanvas;X0,Y0,Radius:integer);
//X0,Y0-координаты центра
var
x,y:integer;
i:extended;
begin
i := 0;
//i-текущий угол - от 0 до 2*pi
while (i < 6.28) do
begin
x := Round(X0+Radius*cos(i));
y := Round(Y0+Radius*sin(i));
//clBlack или любой другой цвет
aCanvas.Pixels[x,y] := clBlack;
i := i + 0.01;
end;
end;


а вообще-то у Canvas есть метод - Ellipse, который может круг нарисовать


 
AnyKey   (2003-01-31 10:41) [7]

Если мне не изменяет память алгоритм Брезенхема выглядит примерно так. Во всяком случае это работает - дырок в круге нет, лишних точек не выводится.

procedure TForm1.Button1Click(Sender: TObject);

//X0,Y0-координаты центра
var
x,X0:integer;
Y0,DY:integer;
i:extended;
j:integer;
Radius: integer;
begin

X0:=100;
Y0:=100;
Radius:=50;
//
X:=0;
DY:=0;
For X:=0 to Round(Radius/SQRT(2)) do
begin
while ((Radius-DY)*(Radius-DY))>(Radius*Radius)-(X*X) do inc(DY);
PaintBox1.Canvas.Pixels[X0+X,Y0+Radius-DY] := clRed;
PaintBox1.Canvas.Pixels[X0-X,Y0+Radius-DY] := clRed;
PaintBox1.Canvas.Pixels[X0+X,Y0-Radius+DY] := clRed;
PaintBox1.Canvas.Pixels[X0-X,Y0-Radius+DY] := clRed;
PaintBox1.Canvas.Pixels[Y0+Radius-DY,X0+X] := clRed;
PaintBox1.Canvas.Pixels[Y0+Radius-DY,X0-X] := clRed;
PaintBox1.Canvas.Pixels[Y0-Radius+DY,X0+X] := clRed;
PaintBox1.Canvas.Pixels[Y0-Radius+DY,X0-X] := clRed;
end;



end;


 
AnyKey   (2003-01-31 10:50) [8]

Можно строку с while заменить на такую
while ((Radius-DY)*(Radius-DY))+1>(Radius*Radius)-(X*X) do inc(DY);покрасивее будет


 
drin   (2003-02-03 13:40) [9]

http://www.codenet.ru/progr/video/alg/alg4.php


 
Timonnn   (2003-02-03 23:41) [10]

Уравнение окружности известно любому школьнику x*x+y*y=r*r , но не каждому известно, что для ускорения работы программы следует все параметры, которые не меняются от координат точки рассчитать один раз (в начале), также следует рассчитывать только одну четверть окружности, а остальные просто отразить.
P.S. А почему этот вопрос размещён в этом разделе форума?


 
AnyKey   (2003-02-07 10:24) [11]

То Timonnn:
Не четверть, а одну восьмую (что, по-видимому, тоже не каждому известно:)). см. алгоритм приведенный выше.


 
AnyKey   (2003-02-07 10:35) [12]

У "настоящего" Брезенхема конешна покруче, всего два сложения, и одно умножение внутри цикла. Но мой тоже быстренький.:)))) Идея почти та же. Сдвигаемся на пиксель по одной координате и выясняем на сколько пикселей надо сдвинуться по другой. И никаких синусов и косинусов!



Страницы: 1 вся ветка

Текущий архив: 2003.03.31;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.006 c
6-100356
oleg_poligon
2003-02-08 13:24
2003.03.31
Sockets


7-100486
Reals
2003-02-07 11:54
2003.03.31
Как можно прикрутить свою программку к Internet Explorer?


6-100362
k-sergey
2003-02-07 08:14
2003.03.31
Где то видел пример проги - установка DialUp соединения


3-100157
Gorik
2003-03-12 19:16
2003.03.31
Строгие графы


14-100439
andsin
2003-03-14 15:18
2003.03.31
COM порт в винде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский