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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2017, 17:45   #1
mega_tortik
 
Регистрация: 23.04.2017
Сообщений: 4
По умолчанию Построение куба в Delphi

Помогите, пожалуйста, построить куб по заданной длине стороны.
Т.е. нужно сделать так, чтобы в эдите можно было указать длину ребра куба, по которой будет строиться сам куб.
Не могу понять, как это сделать((
mega_tortik вне форума Ответить с цитированием
Старый 13.06.2017, 18:03   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от mega_tortik Посмотреть сообщение
строиться сам куб
Хорошо, постройте куб со стороной 10.
Тогда можно будет объяснить, как построить с любой стороной, заданной в эдит.
type_Oleg вне форума Ответить с цитированием
Старый 13.06.2017, 18:03   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от mega_tortik Посмотреть сообщение
Помогите, пожалуйста, построить куб по заданной длине стороны.
что за куб? где Вы его строите?
а если, допустим длина стороны задана равно 50, то как Вы его будете строить?

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Хорошо, постройте куб со стороной 10.
круто. у нас идея совпала!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.06.2017, 18:20   #4
mega_tortik
 
Регистрация: 23.04.2017
Сообщений: 4
По умолчанию

Смотрела пример с вращение куба, где в эдите пишется длина стороны:
Код:
var
  Form1: TForm1;
  a: real;
  B: array[1..5,1..2] of integer;
 
implementation
 
{$R *.dfm}
 
procedure DrawCube;
  var
    i: integer;
  begin
    Form1.Refresh;
//заполняем массив координат вершин куба
    for i:=1 to 5 do begin
      B[i,1]:=trunc(80*sin(a+i*pi/2));
      B[i,2]:=trunc(-20*cos(a+i*pi/2));
    end;
//отрисовываем квадраты
    for i:=1 to 4 do begin
      Form1.Canvas.MoveTo(200+B[i,1],100+B[i,2]);       //Встаём на i вершину
      Form1.Canvas.LineTo(200+B[i+1,1],100+B[i+1,2]);   //Рисуем линию к i + 1 вершине
      Form1.Canvas.MoveTo(200+B[i,1],200+B[i,2]);       //Встаём на i вершину 2го квадрата
      Form1.Canvas.LineTo(200+B[i+1,1],200+B[i+1,2]);   //Рисуем линию к i + 1 вершине 2го квадрата
      Form1.Canvas.LineTo(200+B[i+1,1],100+B[i+1,2]);   //Cоединяем вершины квадратов
    end;
    a:= a+0.02;
  end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
  begin
    DrawCube;
  end;
 
//запуск таймера
procedure TForm1.Button1Click(Sender: TObject);
  begin
    Timer1.Interval:=40;
    Timer1.Enabled:= true;
    a:= StrToFloat(Form1.Edit1.Text);
  end;
 
//остановка таймера
procedure TForm1.Button2Click(Sender: TObject);
  begin
    Timer1.Enabled:= false;
  end;
Но тут же а не является стороной куба. Не знаю, как сделать, чтоб построение куба зависила от длины его стороны, которая указана в эдите.
mega_tortik вне форума Ответить с цитированием
Старый 13.06.2017, 19:05   #5
mega_tortik
 
Регистрация: 23.04.2017
Сообщений: 4
По умолчанию

200 и 100 - это и есть длина ребра в данном коде?
mega_tortik вне форума Ответить с цитированием
Старый 13.06.2017, 22:53   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от mega_tortik Посмотреть сообщение
200 и 100 - это и есть длина ребра в данном коде?
нет. это положение куба на форме.

размеры куба задаются в полярных координатах через эллипс вот тут:
Код:
    for i:=1 to 5 do begin
      B[i,1]:=trunc(80*sin(a+i*pi/2));
      B[i,2]:=trunc(-20*cos(a+i*pi/2));
    end;
почему это так происходит, можно прочитать тут:
Вращение объектов

но как пересчитать координаты эллипса в полярных координатх через заданную сторону ромба -
простите, не понимаю, моих знаний математики и геометрии для этого не хватает
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.06.2017, 23:13   #7
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

А вращение вам вообще-то нужно, или нет?
Может быть достаточно построить, чтоб было так :
Переднюю грань можно построить с помощью Canvas.Rectangle , остальные ребра - Canvas.MoveTo, Canvas.LineTo ..
Изображения
Тип файла: png кубъ.PNG (4.1 Кб, 144 просмотров)
type_Oleg вне форума Ответить с цитированием
Старый 14.06.2017, 00:27   #8
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Если надо, то вот:
Код:
procedure PntCube(Canv:TCanvas;a:Integer);
const MRG=5;  // поле
var hh,a2:Integer;
begin
 hh:=Canv.ClipRect.Bottom-Canv.ClipRect.Top;
 a2:=a div 2;
 Canv.Pen.Style:=psSolid;
 Canv.Rectangle(MRG,hh-MRG,MRG+a,hh-MRG-a);
 Canv.MoveTo(MRG+a,hh-MRG);
 Canv.LineTo(MRG+a+a2,hh-MRG-a2);
 Canv.LineTo(MRG+a+a2,hh-MRG-a2-a);
 Canv.LineTo(MRG+a2,hh-MRG-a2-a);
 Canv.LineTo(MRG,hh-MRG-a);
 Canv.MoveTo(MRG+a+a2,hh-MRG-a2-a);
 Canv.LineTo(MRG+a,hh-MRG-a);
 Canv.Pen.Style:=psDot;
 Canv.MoveTo(MRG,hh-MRG);
 Canv.LineTo(MRG+a2,hh-MRG-a2);
 Canv.LineTo(MRG+a2+a,hh-MRG-a2);
 Canv.MoveTo(MRG+a2,hh-MRG-a2);
 Canv.LineTo(MRG+a2,hh-MRG-a2-a);
end;
// ........
procedure TForm1.Button1Click(Sender: TObject);
begin
 PntCube(Image1.Canvas,100);
end;
Топорно, но работает. Осталось доделать ввод a .
type_Oleg вне форума Ответить с цитированием
Старый 15.06.2017, 08:32   #9
mega_tortik
 
Регистрация: 23.04.2017
Сообщений: 4
По умолчанию

Спасибо всем большое))
mega_tortik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана длина ребра куба.Найти площади грани,площадь полной повернхонсти и объем этого куба Name95 Паскаль, Turbo Pascal, PascalABC.NET 1 25.12.2012 13:35
Вращение куба artscorp Мультимедиа в Delphi 2 09.04.2012 13:31
OpenGL построение куба ZotaC Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 20.02.2012 13:08
[OpenGL, Delphi] Добавление текстур на грани куба newStudent Помощь студентам 0 03.12.2010 00:50