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

Нарисовать розу ветров в Delphi

27.10.2011, 17:06. Показов 2473. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание: Необходимо нарисовать розу ветров для некоторого промежутка времени по данным файла INPUT.TXT. В файле в одной строке записано 8 целых чисел: первое указывает сколько дней ветер дул с востока, второе – с северо-востока, третье – с севера, четвертое – с северо-запада, пятое – с запада, шестое – с юго-запада, седьмое - с юга, восьмое – с юго-востока. Начало отсчета должно совпадать с центром экрана, а рисунок занимать максимально возможную площадь экрана.

Помогите пожалуйста сделать так, чтобы рисунок занимал максимально возможную площадь экрана, в данном случае компонента Image!!



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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
type   tmas1=array[1..8] of integer ;
const len:tmas1=(300,360,200,360,300,360,200,360) ;
  type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    OpenDialog1: TOpenDialog;
    Button3: TButton;
    Image1: TImage;
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure razm(x:tstringgrid);
var i:integer;
begin
with x do
begin
clientwidth:=-1;
for i:=0 to colcount-1 do
clientwidth:=clientwidth+colwidths[i]+gridlinewidth;
clientheight:=-1;
for i:=0 to rowcount-1 do
clientheight:=clientheight+rowheights[i]+gridlinewidth;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,v,sv,s,sz,z,uz,u,uv:integer; f:  textfile;
begin
if OpenDialog1.Execute then AssignFile(f,OpenDialog1.FileName);
  reset(f);
StringGrid1.Visible:=true;
while not Eof(f) do
begin
Readln(f,v,sv,s,sz,z,uz,u,uv);
StringGrid1.Cells[0,1]:=IntToStr(v);
StringGrid1.Cells[1,1]:=IntToStr(sv);
StringGrid1.Cells[2,1]:=IntToStr(s);
StringGrid1.Cells[3,1]:=IntToStr(sz);
StringGrid1.Cells[4,1]:=IntToStr(z);
StringGrid1.Cells[5,1]:=IntToStr(uz);
StringGrid1.Cells[6,1]:=IntToStr(u);
StringGrid1.Cells[7,1]:=IntToStr(uv);
end;
CloseFile(f);
razm(stringgrid1);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var max,i,v,sv,s,sz,z,uz,u,uv:integer;
begin
with StringGrid1 do
begin
v:=StrToInt(cells[0,1]);
sv:=StrToInt(cells[1,1]);
s:=StrToInt(cells[2,1]);
sz:=StrToInt(cells[3,1]);
z:=StrToInt(cells[4,1]);
uz:=StrToInt(cells[5,1]);
u:=StrToInt(cells[6,1]);
uv:=StrToInt(cells[7,1]);
end;
 
with image1.Canvas do
begin
 
 
Pen.Color:=clBlack;
pen.Style:=psSolid;
moveto(300,200); {центр}
lineto(300,200-s); {север}
lineto(300,200+u); {юг}
moveto(300,200);
lineto(300+v,200); {восток}
lineto(300-z,200); {запад}
moveto(300,200); 
lineto(trunc(300+sv*sin(pi/4)), trunc(200-sv*sin(pi/4)));
moveto(300,200); 
lineto(trunc(300+uv*sin(pi/4)), trunc(200+uv*sin(pi/4)));
moveto(300,200); 
lineto(trunc(300-sz*sin(pi/4)), trunc(200-sz*sin(pi/4)));
moveto(300,200);  lineto(trunc(300-uz*sin(pi/4)), trunc(200+uz*sin(pi/4)));
 
  moveto(300,200-s);
  lineto(trunc(300+sv*sin(pi/4)), trunc(200-sv*sin(pi/4))) ;
  moveto(trunc(300+sv*sin(pi/4)), trunc(200-sv*sin(pi/4)))  ;
  lineto(300+v,200) ;
  moveto(300+v,200) ;
  lineto(trunc(300+uv*sin(pi/4)), trunc(200+uv*sin(pi/4)));
  moveto(trunc(300+uv*sin(pi/4)), trunc(200+uv*sin(pi/4)));
  lineto(300,200+u) ;
  moveto(300,200+u) ;
  lineto(trunc(300-uz*sin(pi/4)), trunc(200+uz*sin(pi/4)));
  moveto(trunc(300-uz*sin(pi/4)), trunc(200+uz*sin(pi/4)));
  lineto(300-z,200)  ;
  moveto(300-z,200);
  lineto(trunc(300-sz*sin(pi/4)), trunc(200-sz*sin(pi/4)));
  moveto(trunc(300-sz*sin(pi/4)), trunc(200-sz*sin(pi/4)));
  lineto(300,200-s);
   end;
 
 
end;
 
 
 
 
 
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
with StringGrid1 do
begin
For i:=0 to 7 do
 
Cells[0,0]:='Восток';
Cells[1,0]:='С-В';
Cells[2,0]:='Север';
Cells[3,0]:='С-З';
Cells[4,0]:='Запад';
Cells[5,0]:='Ю-З';
Cells[6,0]:='Юг';
Cells[7,0]:='Ю-В';
 
 end;
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2011, 17:06
Ответы с готовыми решениями:

Изобразить розу ветров
Всем привет. Задание: Роза ветров – это график, отражающий статистику направлений ветра за...

нарисовать розу ветров на с++
нарисовать розу ветров на языке с++?

Даны натуральные числа, задающие число дней в году. Построить розу ветров
Даны натуральные числа V1, V2, …, V8, задающие число дней в году, в которых преобладало...

Роза ветров
Построить на экране розу ветров по заданным натуральным числа к1,…к8, определяющим северное,...

2
401 / 312 / 74
Регистрация: 17.03.2010
Сообщений: 1,119
27.10.2011, 17:21 2
Высчитывай масштаб.
Найди макс X и Y координат.
Получи размер рисунка.
Можно отработать с изменением пропорций - учитывай XMax, YMax и для X, Y отдельный масштаб.
Или с сохранением пропорций учитывай большее из XMax или YMax и один масштаб.
Пример:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const
  XMax = 300;
  YMax = 500;
var
  XScale, YScale : real;//Масштаб
  X, Y : interger;//Координата
  XSize, YSize : integer;// Размер Image
begin
  // Получаем размеры рисунка
  XSize := Image1.Width;
  YSize := Image1.Height;
  // Вычисляем масштаб для X
  XScale := XSize / XMax
  // Вычисляем масштаб для Y
  YScale := YSize / YMax
  // Прорисовываем все точки
  for ...
  begin
    // Масштабируем точки
    X := Trunc(X * XScale);
    Y := Trunc(Y * YScale);
  end;
end;
При этом не обязательно задавать Max константой, можно ее вычислить.
1
0 / 0 / 0
Регистрация: 21.03.2011
Сообщений: 10
08.11.2011, 23:03  [ТС] 3
спасибо
0
08.11.2011, 23:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2011, 23:03
Помогаю со студенческими работами здесь

Роза ветров
Как люди есть такая задачка,но я ее не сделаю без помощи,помогите пожалуйста!!! распредение...

Роза ветров
Довольна интересная задача, но непосильная пока мне(( на борланде надо Создать файл, содержащий...

Трехмерная роза ветров
Здравствуйте, уважаемые форумчане. Я ломаю готову над тем, как построить трехмерную розу ветров...

Нарисовать узор в Delphi


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

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