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

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 27.03.2020, 10:47   #1
Miracleone
Пользователь
 
Регистрация: 23.06.2019
Сообщений: 18
По умолчанию Построение перспективной проекции

indeclared indefiner figure, vertexes,ribs, но в type они объявлены и не понятно как определить существующие рёбра
Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
 const VertexCount=8;
 const ViewDist=200;
 
type
TFigure = record
Vertexes: array[0..VertexCount - 1] of record
X, Y, Z: Double;
end;
Ribs: array[0..VertexCount - 1, 0..VertexCount - 1] of Boolean;
PrVertexes: array[0..VertexCount - 1] of record
prX, prY: Integer;
end;
end;
 
procedure ProjectFigure(var F: TFigure);//расчет координат проекции
var
I: Integer;
P: Double;
maxX, maxY:integer;
begin
maxX:=round(form1.Width/2);
maxY:=round(form1.Height/2);
for I := 0 to VertexCount - 1 do
with F.Vertexes[I], F.PrVertexes[I] do
begin
P:=z+ViewDist;
prX := maxX + Round(x * ViewDist/p);
prY := maxY + Round(y * ViewDist/p);
end;
 
 
 end;
procedure DrawProjection(F: TFigure); var I, J: Integer; //отрисовка проекции фигуры
  begin with F do for I := 0 to VertexCount - 2 do for J := I + 1 to VertexCount - 1 do
  if Ribs[I, J] then
  begin form1.Canvas.MoveTo(PrVertexes[I].prX, PrVertexes[I].prY);
  form1.Canvas.LineTo(PrVertexes[j].prX, PrVertexes[j].prY);
   end;
end;
 
 
procedure InitFigure; //инициализация фигуры
 
  begin
    with Figure do
  begin
   Vertexes[0].x := 0;
   Vertexes[0].y := 0;
   Vertexes[0].z := 0;
   Vertexes[1].x := 0;
   Vertexes[1].y := 50;
   Vertexes[1].z := 0;
   Vertexes[2].x := 50;
   Vertexes[2].y := 0;
   Vertexes[2].z := 0;
   Vertexes[3].x := 50;
   Vertexes[3].y := 50;
   Vertexes[3].z := 0;
   Vertexes[4].x := 50;
   Vertexes[4].y := 0;
   Vertexes[4].z := 50;
   Vertexes[5].x := 50;
   Vertexes[5].y := 50;
   Vertexes[5].z := 50;
   Vertexes[6].x := 0;
   Vertexes[6].y := 0;
   Vertexes[6].z := 50;
   Vertexes[7].x := 0;
   Vertexes[7].y := 50;
   Vertexes[7].z := 50;
 
   Ribs[i, j] := True;
 
    end;
   end;
 
 
end.
Miracleone вне форума Ответить с цитированием
Старый 27.03.2020, 13:00   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,040
По умолчанию

Цитата:
Код:
procedure InitFigure; //инициализация фигуры
 
  begin
    with Figure do
  begin
инициализировать можно переменную (которой у вас нет)
Код:
var
  figure: TFigure;
Цитата:
но в type они объявлены
в вашем implemention type объявлен тип TFugure
но никак не переменная.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 27.03.2020, 18:28   #3
Miracleone
Пользователь
 
Регистрация: 23.06.2019
Сообщений: 18
По умолчанию

evg_m, Как определить существующие рёбра?
Miracleone вне форума Ответить с цитированием
Старый 27.03.2020, 20:25   #4
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,128
По умолчанию

Цитата:
Сообщение от Miracleone Посмотреть сообщение
evg_m, Как определить существующие рёбра?
Посидеть подумать и выписать ручками.
Или взять Blender встаивть куб увеличить масшаб сдвинуть и сохранить в obj
Вот описание граней
Цитата:
f 1/1/1 5/2/1 7/3/1 3/4/1
f 4/5/2 3/4/2 7/6/2 8/7/2
f 8/8/3 7/9/3 5/10/3 6/11/3
f 6/12/4 2/13/4 4/5/4 8/14/4
f 2/13/5 1/1/5 3/4/5 4/5/5
f 6/11/6 5/10/6 1/1/6 2/13/6
Откуда ребра
Цитата:
1-5
5-7
7-3
3-1

4-3
3-7
7-8
8-4

8-7
7-5
5-6
6-8

6-2
2-4
4-8
8-6

2-1
1-3
3-4
4-2

6-5
5-1
1-2
2-6
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 27.03.2020, 21:07   #5
Miracleone
Пользователь
 
Регистрация: 23.06.2019
Сообщений: 18
По умолчанию

Pavia, делфи жалуется на восьмёрки
Miracleone вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение перспективной проекции трехмерного объекта Miracleone Общие вопросы Delphi 1 23.03.2020 09:28
D3.js проекции - JavaScript _Tasha_ JavaScript, Ajax 0 28.03.2017 17:15
ПЕРЕКЛЮЧЕНИЕ ПРОЕКЦИИ OpenGL SAMOUCHKA Qt и кроссплатформенное программирование С/С++ 3 24.04.2012 23:15
как избавиться от мерцания в OpenGL при перспективной проекции (двойная буферизация включена) anyx Свободное общение 0 01.02.2010 11:00
О перспективной работе vc54 Свободное общение 1 28.09.2009 08:11


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS