Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...
Комментарии на английском переведите на русский. Дополните код комментариями, чтоб было понятно как работает алгоритм
Пример, к которому вы оставили комментарий строит именно то самое изображение на языке с#, которое вам необходимо. Отличается только цветовая палитра.

Счетчики и рейтинг

Рейтинг@Mail.ru
Скриншот к примеру
Среда программирования: 
Lazarus 1.2.4 win32/win64

Генерируем 1/8 часть окружности. Первая точка генерируемого участка окружности имеет координаты (0;радиус). По горизонтали координата X изменяется от 0 до радиус/sqrt(2).

Берём целое, максимально приближенное значение выражения (радиус/sqrt(2)).
Циклом, меняем координату по горизонтали от 0 до (радиус/sqrt(2)), увеличивая её на 1 до того момента, пока координата <=round(радиус/sqrt(2)).

В цикле ищем наиболее подходящее значение по вертикали Y. Для этого находим d1=|радиус2-X2-Y2| и d2=|радиус2-X2-(Y-1)2|. Нас интересует, какое из этих выражений ближе к нулю. Если d1>d2, то уменьшаем значение Y на единицу. Иначе — оставляем значение неизменным. Полученные координаты отражаем 7 раз.
Получаем 8 точек
( X, Y); ( Y, X);
( X,-Y); ( Y,-X);
(-X, Y); (-Y, X);
(-X,-Y); (-Y,-X);

Код программы: 

unit Unit1;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  Buttons;
type
  { TForm1 }
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    PaintBox1: TPaintBox;
    procedure BitBtn1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
 
procedure Circle(x_,y_,r_:integer;colour:TColor);
var x,y,d1,d2:integer;
  begin
   x:=0;
   y:=r_;
   while ( x<=round(r_/sqrt(2)) )
   do begin
 
   Form1.PaintBox1.Canvas.Pixels[x_+x,y_+y]:=colour;
   Form1.PaintBox1.Canvas.Pixels[x_+x,y_-y]:=colour;
   Form1.PaintBox1.Canvas.Pixels[x_-x,y_+y]:=colour;
   Form1.PaintBox1.Canvas.Pixels[x_-x,y_-y]:=colour;
 
   Form1.PaintBox1.Canvas.Pixels[x_+y,y_+x]:=colour;
   Form1.PaintBox1.Canvas.Pixels[x_+y,y_-x]:=colour;
   Form1.PaintBox1.Canvas.Pixels[x_-y,y_+x]:=colour;
   Form1.PaintBox1.Canvas.Pixels[x_-y,y_-x]:=colour;
 
   x:=x+1;
   d1:=ABS(r_*r_-x*x-y*y);
   d2:=ABS(r_*r_-x*x-(y-1)*(y-1));
   if(d1>d2)  then  y:=y-1;
   end;
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Circle(200,200,100,ClBlack);
end;
end.

Прикрепленный файлРазмер
riza_circle.rar685.84 кб