Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

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

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

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

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

Цитата:
Сообщение от Аватар Посмотреть сообщение
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, 11:22   #4
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,940
Репутация: 6285
По умолчанию

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

Для общего развития - у тебя проекция кабине
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Старый 12.11.2017, 11:42   #5
newerow1989
Я самый любопытный
Профессионал
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Адрес: RU, Алтайский край, Красногорский р-н, с. Балыкса, ул. Центральная Сообщений: 7,541 Репутация: 37104
Сообщений: 1,702
Репутация: 1522

skype: newerow1989
По умолчанию

Самое простое:
Код:

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.narod.ru
[Паскаль] [Delphi]

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

Цитата:
Сообщение от goto ∞ Посмотреть сообщение
Как проецировать все это дело теперь на экран правильно? Проекция косоугольная по условию задачи
Самые простые формулы
Код:

Xэкр = Xцентр + X + Y*k1
Yэкр = Yцентр - Z + Y*k2

k1 и k2 можно подобрать по вкусу
Black Fregat вне форума   Ответить с цитированием
Старый 13.11.2017, 10:22   #7
goto ∞
Форумчанин
 
Аватар для goto ∞
 
Регистрация: 21.12.2010
Адрес: 0x0000-0x9FFFFF
Сообщений: 119
Репутация: 9
По умолчанию

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

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


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

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

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

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

Цитата:
Сообщение от 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 в 11:43.
goto ∞ вне форума   Ответить с цитированием
Старый 13.11.2017, 14:09   #10
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,018
Репутация: 675
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


18:06.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru