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

Вход на сайт

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

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

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

Здравствуйте, Ильгиз. Математика - царица наук (Карл Гаусс). Изучение математики начинается с детского сада, когда нас учат считать и выполнять простые арифметические операции. Любой, даже самый простейший алгоритм будет связан с арифметическими...
Я хотел узнать математика это обязательно в программирование. Пять лет назад просто из любопытства я увлекся HTML потом изучил CSS и JvaScript потом изучил PHP и Java. Как то не задумывался и начал смотреть форумы и узнал что без математики не...
Все верно, но так же необходимо зайти в: Компоновщик -> Ввод -> Дополнительные зависимости Здесь необходимо нажать изменить и в Дополнительные зависимости прописать это: SDL2.lib SDL2main.lib SDL2test.lib Без этого не заработает. (MVS 2015)
Спасибо за реализацию, она действительно быстрая. Но не все линии отрисовывает в нужную сторону... Необходимо добавить проверку для случая X-линии if(y1 "<" y0) grad=-grad; и аналогично для Y-линии if(x1 "<" x0) grad=-grad; P.S. На...
Отличные уроки(учу GL по ним), только в renderScene нужно добавить очистку буфера цвета и буфера глубины. При изменении размеров треугольники размножаются)

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

Яндекс.Метрика Рейтинг@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 кб