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

Вход на сайт

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

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

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

Рекурсия присутствует?
И где эти прикрепленные файлы?
Я код на C++ набрал сам. Строил кривую Безье, но "прилипал" к нулю. То есть я задаю точки далеко от нуля, а он строил из нуля, а потом только обходил предложенные точки. Потом я нашёл Ваш сайт и эту статью. Оказалось, что я забыл возвести t в...
просто я не так понял, здесь мы вращаем точки куба что вращает сам куб. Мне нужно вращать просто 3д объект , данный способ не подходит
Задавайте объект в мировых координатах. Вращайте его относительно мировой системы координат. А при отрисовке преобразуйте в экранные координаты. Посмотрите пример преобразования в экранные координаты.

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

Рейтинг@Mail.ru Яндекс.Метрика
Язык программирования: 
Pascal
Среда программирования: 
Lazarus

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, ComCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    PaintBox1: TPaintBox;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Resizing(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
 
  private
    { private declarations }
  public
    { public declarations }
    // процедура прорисовки облака
    procedure Cloud (x, y: Integer; ColorCloud: TColor);
  end;
 
var
  Form1: TForm1;
  i: double;
   x0, y0, x1, y1, x2, y2, x3, y3, x4, y4 : integer;
  center1, center2 : integer;
  radius, diameter: integer;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Resizing(Sender: TObject);
begin
      center1:= round(Form1.Width/2);
      center2:= round(Form1.Height/2);
 
      Button1.Top:=Form1.Height-34;
 
      PaintBox1.Width:=Form1.Width - 10;
      PaintBox1.Height:=Form1.Height - 54;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  i:=i+pi/36;
  // Изменение координат прорисовки
     x1:=round(center1-radius*sin(i));
     y1:=round(center2+radius*cos(i));
     x2:=round(center1+radius*sin(i+pi/3));
     y2:=round(center2-radius*cos(i+pi/3));
     x3:=round(center1-radius*sin(i+2*pi/3));
     y3:=round(center2+radius*cos(i+2*pi/3));
  // Прорисовка объекта в новом месте
   Cloud(x1,y1,clRed);  //Красный круг
   Cloud(x2,y2,clGreen);//Зеленый круг
   Cloud(x3,y3,clYellow);//Желтый круг
end;
procedure TForm1.Cloud(x, y: Integer; ColorCloud: TColor);
begin
  // прорисовка облака из двух эллипсов
  with PaintBox1.Canvas do begin
   Pen.Style := psClear;
   Brush.Color := ColorCloud;
   Ellipse(x-diameter,y-diameter,x+diameter,y+diameter);
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  i:=0;
  radius:= 90;
  diameter := 50;
  // прорисовка картинки по которой двигается объект
  PaintBox1.Canvas.Brush.Color := clBlue;
  PaintBox1.Canvas.Ellipse(center1-diameter,center2-diameter, center1+diameter, center2+diameter);
  // Включение таймера - запуск анимации
  Timer1.Enabled:=true;
end;
 
end.

Прикрепленный файлРазмер
Google Edition.rar2.64 кб