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

Вход на сайт

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

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

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

dobryj den, popytalas otkryt prikreplionnyj fail ctoby posmotret kak rabotaet, no mne ego ne pokazyvaet vydajet osibku. Pochemu?
Очень интересно! ии сайт крутой жалко что умирает(
У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.

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

Рейтинг@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 Мб