Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 16
1

Многогранники на форме.

14.05.2012, 15:33. Показов 1560. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, имею программу, которая реализует построение Nугольника с определенным радиусом, однако при построении Nугольника он строится на форме, а не на имейдже, при попытке впихнуть туда Тимейдж выскакивает ошибка, подскажите пожайлусто как быть.
Текст проги:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type Tpoint=record
            x,y:integer;
            end;
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var n,r,x0,y0,i,j:integer;
    p:array of Tpoint;  //динамический массив точек
    a,da:real;
begin
randomize;
n:=StrToInt(Edit1.Text); //количество вершин
r:=StrToInt(Edit2.Text); //радиус описанной окружности
da:=360/n; //величина центрального угла = шаг поворота
//рисуем на Canvas формы
x0:=Form1.Width div 2; //середина формы
y0:=Form1.Height div 2;
Setlength(p,n+1); //создаем массив - выделяем под него память(1-я точка 2 раза)
a:=0; //начальный угол от горизонтальной оси против часовой стрелки
for i:=0 to n-1 do //создаем массив координат вершин
  begin
    p[i].x:=x0+round(r*cos(a*pi/180));
    p[i].y:=y0-round(r*sin(a*pi/180));
    a:=a+da;
  end;
p[n].x:=p[0].x; //дублируем первую точку для замыкания полигона
p[n].y:=p[0].y;
//рисуем многоугольник
Canvas.MoveTo(p[0].x,p[0].y); //в первую точку
Canvas.Pen.Color:=random($fffff); //случайный цвет пера
Canvas.Pen.Width:=2; //линия потолще
for i:=0 to n do
Canvas.LineTo(p[i].x,p[i].y);//рисуем полигон
Canvas.Pen.Width:=1; //нормальная толшина линий
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2012, 15:33
Ответы с готовыми решениями:

Многогранники
Здравствуйте! Помогите, пожалуйста, решить задачи. 1. Основанием пирамиды МАВСD является квадрат...

Многогранники
1) Основанием прямого параллелепипеда является ромб с диагоналями 10 см и 24 см, а высота...

Многогранники
Допишите пожалуйста вместо точек почему это так Только дополнить надо а решение есть)))

Правильные многогранники
ЧИСЛО СТОРОН УМНОЖИТЬ НА КРАЯ СТОРОН 1.1.1 ТЕТРАЭДР 4 Х 3 = 12 + 2.1.2 КУБ 6 Х...

4
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
14.05.2012, 16:37 2
Canvas замени на Image1.Canvas (или как он там у тебя называется)
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.05.2012, 17:11 3
Цитата Сообщение от JohnDown Посмотреть сообщение
он строится на форме, а не на имейдже
Ни украсть, ни покараулить....
0
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
14.05.2012, 17:30 4
Все работает, ищи ошибку... Ток что проверил:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
procedure TForm1.Button1Click(Sender: TObject);
var n,r,x0,y0,i,j:integer;
    p:array of Tpoint;  
    a,da:real;
begin
randomize;
n:=StrToInt('5'); 
r:=StrToInt('50');
da:=360/n; 
 
x0:=Form1.Width div 2; 
y0:=Form1.Height div 2;
Setlength(p,n+1); 
a:=0; 
for i:=0 to n-1 do 
  begin
    p[i].x:=x0+round(r*cos(a*pi/180));
    p[i].y:=y0-round(r*sin(a*pi/180));
    a:=a+da;
  end;
p[n].x:=p[0].x; 
p[n].y:=p[0].y;
 
Image1.Canvas.MoveTo(p[0].x,p[0].y); 
Image1.Canvas.Pen.Color:=clRed;
Image1.Canvas.Pen.Width:=2; 
for i:=0 to n do
   Image1.Canvas.LineTo(p[i].x,p[i].y);
Image1.Canvas.Pen.Width:=1;
end;
А не забыл на форму Имадж кинуть (ну это так, на всякий случай) Кстати, Х0 и У0 рассчитаны в координатах формы, а если рисовать на канве имаджа, то нужно использовать его высоту и ширину
1
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 16
14.05.2012, 18:08  [ТС] 5
Cпасибо, разобрался вроде ))
0
14.05.2012, 18:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2012, 18:08
Помогаю со студенческими работами здесь

полуправильные многогранники
Помогите пожалуйста найти презентацию на темУ: полуправильные многогранники Проискал около 1,5...

Многогранники, как реализовать
Как реализовать программу, которая могла бы: нарисовать многогранник по заданным параметрам...

Реализовать программу "Многогранники" в ООП стиле
Помогите кто чем может 1) Разработать класс, обязательными членами которого должны являться:...

Поиск записей в подчиненной форме по значению поля со списком в главной форме
Доброго времени суток уважаемые Форумчане! Очередной раз необходима Ваша помощь!!! Суть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru