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

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

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

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

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

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

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Lazarus 1.0.14 win 64

Программа, осуществляющая операции масштабирования, поворота и смещения произвольной фигуры и отрисовку ее в экранной области.

В Lazarus`е создаем форму, на которую добавляем следующие объекты: область для рисования, текстовые поля, в которые будут вводиться коэффициент масштабирования, угол поворота и координаты смещения данной фигуры, и кнопки, по нажатию которых будут соответственно выполняться требуемые операции.

И функции:
Init(), куда будут передаваться координаты всех вершин фигуры;
Draw(), отвечающая за отрисовку изображения.

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

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    PaintBox1: TPaintBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Init();
    procedure Draw();
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  x,y : array [0..100] of Integer;
  i,tmpx,x0,y0,dx,dy:     Integer;
  k,angle:                Double;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
//Масштабирование
procedure TForm1.Button1Click(Sender: TObject);
begin
    //Коэффициент масштабирования
     k:=StrToFloat(Edit1.Text);
     if k=1 then
     Form1.Init();
 
     for i:=0 to 10 do
     begin
          x[i]:=Round(x[i]*k);
          y[i]:=Round(y[i]*k);
     end;
 
     x0 := Round(x0*k);
     y0 := Round(y0*k);
     Form1.Draw();
end;
 
//Поворот
procedure TForm1.Button2Click(Sender: TObject);
begin
    //Угол поворота
    angle := pi*StrToInt(Edit2.Text)/180;
 
     for i:=0 to 9 do
     begin
          tmpx :=x[i];
          x[i]:=x0+Round((x[i]-x0)*cos(angle))-Round((y[i]-y0)*sin(angle));
          y[i]:=y0+Round((tmpx-x0)*sin(angle))+Round((y[i]-y0)*cos(angle));
     end;
 
     Form1.Draw();
end;
 
 //Смещение
procedure TForm1.Button3Click(Sender: TObject);
begin
     //Координаты, на которые осуществляется сдвиг
     dx:=StrToInt(Edit3.Text);
     dy:=StrToInt(Edit4.Text);
     x0:=x0+dx;
     y0:=y0-dy;
     for i:=0 to 9 do
     begin
          tmpx :=x[i];
          x[i]:=x[i]+dx;
          y[i]:=y[i]-dy;
     end;
 
     Form1.Draw();
end;
 
//Координаты всех вершин фигуры
procedure TForm1.Init();
begin
     //Координаты точки, относительно которой осуществляется поворот
     x0:=200; y0:=200;
     //Лодка
     x[0]:=50; y[0]:=200;
     x[1]:=105; y[1]:=275;
     x[2]:=250; y[2]:=275;
     x[3]:=275; y[3]:=200;
     //Парус1
     x[4]:=50; y[4]:=195;
     x[5]:=140; y[5]:=30;
     x[6]:=140; y[6]:=195;
     //Парус2
     x[7]:=145; y[7]:=195;
     x[8]:=145; y[8]:=15;
     x[9]:=275; y[9]:=195;
end;
 
//Отрисовка
procedure TForm1.Draw();
begin
    with PaintBox1.Canvas do
         begin
         Brush.Color:=clDefault;
         Rectangle(0,0,PaintBox1.Width,PaintBox1.Height);
         //Лодка
         Brush.Color:=RGBToColor(181,181,181);
         Polygon([Point(x[0],y[0]),Point(x[1],y[1]),Point(x[2],y[2]),Point(x[3],y[3])]);
         //Парус1
         Brush.Color:=RGBToColor(0,245,255);
         Polygon([Point(x[4],y[4]),Point(x[5],y[5]),Point(x[6],y[6])]);
         //Парус2
         Brush.Color:=RGBToColor(0,197,205);
         Polygon([Point(x[7],y[7]),Point(x[8],y[8]),Point(x[9],y[9])]);
         end;
end;
 
 
end

Прикрепленный файлРазмер
ship.zip1.1 Мб