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

Вход на сайт

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

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

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

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

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

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