Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
14-100406
Jeka
2003-03-11 14:52
2003.03.31
видел майку с надписью


1-100204
DenKop
2003-03-18 23:04
2003.03.31
png, jpg, bmp


14-100415
copyr25
2003-03-08 09:56
2003.03.31
Я, конечно, поздравляю всех девушек в конференции


8-100337
spleen
2002-12-26 14:00
2003.03.31
установка font (type,size,style) api для печати на принтер


7-100479
maxim2
2002-12-12 14:14
2003.03.31
Как узнать есть ли привод CD-ROM в компе





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский