Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2017, 12:28   #1
goto ∞
Форумчанин
 
Аватар для goto ∞
 
Регистрация: 21.12.2010
Сообщений: 155
По умолчанию Движение куба в пространстве вдоль отрезка P1 P2

Движение тела (куба) в трехмерном пространстве вдоль отрезка P1P2 c отражением от его концов. Использовать косоугольную проекцию. Как только центр куба достигает границы отрезка то куб меняет направление в противоположную сторону.
Должно получиться что такого вроде что на картинке. Никаких сеток, осей рисовать не нужно.
http://www.programmersforum.ru/attac...1&d=1510392214

Так как не знаком с графикой начну с простого.

Какие компоненты нужно размещать на форме что бы рисовать отрезок и куб. И как примерно вывести куб и отрезок на форму. Для куба используется косоугольная проекция.
Изображения
Тип файла: jpg 1.jpg (21.7 Кб, 107 просмотров)
goto ∞ вне форума Ответить с цитированием
Старый 11.11.2017, 12:37   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

PaintBox для отрисовки, таймер для организации имитации движения, пару кнопок для старт-стоп, можно еще что-нибудь типа TrackBar для изменения скорости движения
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.11.2017, 09:46   #3
goto ∞
Форумчанин
 
Аватар для goto ∞
 
Регистрация: 21.12.2010
Сообщений: 155
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
PaintBox для отрисовки, таймер для организации имитации движения, пару кнопок для старт-стоп, можно еще что-нибудь типа TrackBar для изменения скорости движения
Вот продвинулся чуток
Код:
type
        T3DPoint=record
           x,y,z:integer;
        end;
  var
  // мировые координаты вершин
  w : array [1..8] of T3DPoint = (
    (x: 0;  y: 0;  z:50),
    (x: 0;  y: 50; z:50),
    (x: 50; y: 0;  z:50),
    (x: 50; y: 50; z:50),
    (x: 50; y: 0;  z:0),
    (x: 50; y: 50; z:0),
    (x: 0;  y: 0;  z:0),
    (x: 0;  y: 50; z:0)
  );

  v:array[1..8] of TPoint; //Видовые координаты

implementation

{$R *.dfm}

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  with Form1, PaintBox1, Canvas do
    begin
      Pen.Color := clBlue;
      Pen.Width:= 2;
      MoveTo(750, 150);   //Начальная позиция линии
      LineTo(750, 450);   // Рисуем линию

    end;
end;

Как проецировать все это дело теперь на экран правильно? Проекция косоугольная по условию задачи
goto ∞ вне форума Ответить с цитированием
Старый 12.11.2017, 10:22   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Нужно плясать от координат центра куба, угла 45 градусов и коэффициента искажения, у тебя на картинке он примерно в районе ~0.7. Для этого взять листок бумаги и вывести формулы координат вершин в зависимости от координат центра куба с учетом еще того, что ось Y на канвас вниз направлена

Для общего развития - у тебя проекция кабине
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.11.2017, 10:42   #5
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Самое простое:
Код:
var x,y,dy:integer;

procedure Ris(x,y:integer;color:tColor);
begin
   With Form1.Image1.Canvas do
   begin
      Pen.Color:=color;
      Pen.Width:=3;
      Rectangle(x-40,y-40,x+40,y+40);
      MoveTo(x-40,y-40);
      LineTo(x-20,y-60);
      LineTo(x+60,y-60);
      LineTo(x+40,y-40);
      MoveTo(x+40,y+40);
      LineTo(x+60,y+20);
      LineTo(x+60,y-60);
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   x:=100;
   y:=200;
   dy:=-5;
   Timer1.Interval:=100;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Ris(x,y,clWhite);
   y:=y+dy;
   If (y<=60) or (y>=200) then
      dy:=-dy;
   Ris(x,y,clBlack);
   With Image1.Canvas do
   begin
      Pen.Color:=clBlack;
      Pen.Width:=2;
      MoveTo(200,50);
      LineTo(200,190);
   end;
end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 12.11.2017 в 10:44.
newerow1989 вне форума Ответить с цитированием
Старый 12.11.2017, 12:28   #6
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от goto ∞ Посмотреть сообщение
Как проецировать все это дело теперь на экран правильно? Проекция косоугольная по условию задачи
Самые простые формулы
Код:
Xэкр = Xцентр + X + Y*k1
Yэкр = Yцентр - Z + Y*k2
k1 и k2 можно подобрать по вкусу
Black Fregat вне форума Ответить с цитированием
Старый 13.11.2017, 09:22   #7
goto ∞
Форумчанин
 
Аватар для goto ∞
 
Регистрация: 21.12.2010
Сообщений: 155
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Самое простое:

У меня просто рисует вертикальную линию, больше ничего не происходит.


А все разобрался, круто. Только подходит ли это под условия задачи?(Проекции). Можно немножко комментарий к коду.

Последний раз редактировалось goto ∞; 13.11.2017 в 09:32.
goto ∞ вне форума Ответить с цитированием
Старый 13.11.2017, 09:25   #8
goto ∞
Форумчанин
 
Аватар для goto ∞
 
Регистрация: 21.12.2010
Сообщений: 155
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Нужно плясать от координат центра куба, угла 45 градусов и коэффициента искажения, у тебя на картинке он примерно в районе ~0.7. Для этого взять листок бумаги и вывести формулы координат вершин в зависимости от координат центра куба с учетом еще того, что ось Y на канвас вниз направлена

Для общего развития - у тебя проекция кабине
Ну вот у меня координаты вершин многоугольника есть, центром куба будет если не ошибаюсь :
x = 25, y = 25, z = 25. А зачем нужна тут формула я не понимаю
goto ∞ вне форума Ответить с цитированием
Старый 13.11.2017, 10:24   #9
goto ∞
Форумчанин
 
Аватар для goto ∞
 
Регистрация: 21.12.2010
Сообщений: 155
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Самое простое:
У тебя были ошибки в программе как логические так и числами. Исправил. Теперь работает как надо.
Добавил константы P1 и P2 что бы можно было задавать точки универсально.

Код:

const P1 = 50;
const P2 = 250;

var
  Form1: TForm1;
  x,y,dy:integer;
implementation

{$R *.dfm}

procedure Ris(x,y:integer;color:tColor);
begin
   With Form1.Image1.Canvas do
   begin
      Pen.Color:=color;
      Pen.Width:=3;
      Rectangle(x-40,y-40,x+40,y+40);
      MoveTo(x-40,y-40);
      LineTo(x-20,y-60);
      LineTo(x+60,y-60);
      LineTo(x+40,y-40);
      MoveTo(x+40,y+40);
      LineTo(x+60,y+20);
      LineTo(x+60,y-60);
   end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
   x:=100;
   y:=200;
   dy:=-5;
   Timer1.Interval:=25;

   with Form1.Image1.Canvas do
   begin
      Pen.Color:=clBlack;
      Pen.Width:=2;
      MoveTo(250,P1);
      LineTo(250,P2);
   end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Ris(x,y,clWhite);
   y:=y+dy;
   If (y<=P1) or (y>=P2) then
      dy:=-dy;
      Ris(x,y,clBlack);
end;
Нужно бы сейчас работу подгонять под условия задачи, тут куб рисуется с помощью линий но нету формулы проекции и матрицы переноса тоже нету, как быть

Последний раз редактировалось goto ∞; 13.11.2017 в 10:43.
goto ∞ вне форума Ответить с цитированием
Старый 13.11.2017, 13:09   #10
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от goto ∞ Посмотреть сообщение
Только подходит ли это под условия задачи?(Проекции)
Как раз косоугольная проекция выходит.
Коэффициенты k1, k2 - как раз проекции орта направления проектирования
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу движения небольшой фигуры (крестик) вдоль отрезка P1P2. raitox1 Фриланс 2 18.03.2013 16:02
Написать программу движения небольшой фигуры (крестик) вдоль отрезка P1P2. Ferz27 Фриланс 1 29.04.2012 08:57
Прграммка: движение крестика вдоль отрезка G16 Фриланс 3 04.11.2010 19:57
Как реолизовать построение отрезка в 3D пространстве, как в SketchUp? Dima6120 Мультимедиа в Delphi 6 23.06.2010 19:55
Движение окружности и отрезка. Ev@ngel Компоненты Delphi 0 18.04.2008 22:16