Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация

Ответ Создать новую тему
 
cl0oud
Форумчанин
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 56
04.09.2010, 07:02     алгоритм нахождения высот, медиан, биссектрис и графические компоненты по координатам вершин треугольника
  #1
Создать приложение по разделу аналитической геометрии «Треугольник». Приложение должно содержать:
1) подпрограммы, реализующие:
а) алгоритм нахождения высот (по координатам вершин треугольника);
б) алгоритм нахождения медиан;
с) алгоритм нахождения биссектрис.

2) приложение должно содержать графические компоненты.
AdAgent
Объявления
04.09.2010, 07:02
Puporev
Модератор
42405 / 30919 / 1868
Регистрация: 18.05.2008
Сообщений: 65,937
04.09.2010, 17:45     алгоритм нахождения высот, медиан, биссектрис и графические компоненты по координатам вершин треугольника
  #2
Вот написал я вам медианы и биссектрисы, здесь координаты определяются на основании их свойств пропорциональности:
- медиана делит сторону пополам
- биссектриса пропорционально прилежащим сторонам.
с высотами легкого решения не знаю, а с уравнениями прямых и решением систем лень заморачиваться, попробуйте сами. Это 1 процедуру дописать.
Код Pascal
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
uses crt,graph;
type point=record
           x,y:real;
           end;
var gd,gm,w,h,cl:integer;
    a,b,c,ma,mb,mc,ba,bb,bc:point;
    va,vb,vc:point;{для высот, пока не используются}
    dma,dmb,dmc:real;
    dba,dbb,dbc:real;
    dva,dvb,dvc:real;{для высот, пока не используются}
{opredelenie dliny po Geronu}
function Dlina(a,b:point):real;
begin
Dlina:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;
{koordinaty osnovanij i dliny median}
procedure Med(a,b,c:point;var ma,mb,mc:point;var dma,dmb,dmc:real);
begin
ma.x:=(b.x+c.x)/2;ma.y:=(b.y+c.y)/2;
mb.x:=(a.x+c.x)/2;mb.y:=(a.y+c.y)/2;
mc.x:=(a.x+b.x)/2;mc.y:=(a.y+b.y)/2;
dma:=Dlina(a,ma);
dmb:=Dlina(b,mb);
dmc:=Dlina(c,mc);
end;
{koordinaty osnovanij i dliny bissektris}
procedure Bis(a,b,c:point;var ba,bb,bc:point;var dba,dbb,dbc:real);
var l1,l2,l3:real;
begin
l1:=Dlina(a,b);
l2:=Dlina(b,c);
l3:=Dlina(c,a);
ba.x:=b.x+l1*(c.x-b.x)/(l1+l3);
ba.y:=b.y+l1*(c.y-b.y)/(l1+l3);
bb.x:=c.x+l2*(a.x-c.x)/(l1+l2);
bb.y:=c.y+l2*(a.y-c.y)/(l1+l2);
bc.x:=a.x+l3*(b.x-a.x)/(l2+l3);
bc.y:=a.y+l3*(b.y-a.y)/(l2+l3);
dba:=Dlina(a,ba);
dbb:=Dlina(b,bc);
dbc:=Dlina(c,bc);
end;
{risovanie}
procedure Draw(w,h:integer;a,b,c,t1,t2,t3:point;cl:integer);
var x0,y0,xa,ya,xb,yb,xc,yc,xt1,yt1,xt2,yt2,xt3,yt3,n,i:integer;
    xmax,ymax,mx:real;
    s:string;
begin
x0:=w div 2;y0:=h div 2;{centr}
xmax:=abs(a.x);{maximum po X}
if abs(b.x)>xmax then xmax:=abs(b.x);
if abs(c.x)>xmax then xmax:=abs(c.x);
ymax:=abs(a.y);{maximum po Y}
if abs(b.y)>ymax then ymax:=abs(b.y);
if abs(c.y)>ymax then ymax:=abs(c.y);
{masshtaby po osyam}
if xmax>ymax then
  begin
   mx:=(h-60)/(xmax*2);
   n:=round(xmax);
  end
else
  begin
   mx:=(h-60)/(ymax*2);
   n:=round(ymax);
  end;
{koordinatnaya setka}
line(0,y0,w,y0);
line(x0,0,x0,h);
setlinestyle(1,0,0);
setcolor(8);
for i:=1 to 2*n do
 begin
  line(0,y0-round(i*mx),w,y0-round(i*mx));
  line(0,y0+round(i*mx),w,y0+round(i*mx));
  line(x0-round(i*mx),0,x0-round(i*mx),h);
  line(x0+round(i*mx),0,x0+round(i*mx),h);
  str(i,s);
  OutTextXY(x0-10,y0-round(i*mx),s);
  OutTextXY(x0-20,y0+round(i*mx),'-'+s);
  OutTextXY(x0+round(i*mx),y0+5,s);
  OutTextXY(x0-round(i*mx)-10,y0+5,'-'+s);
 end;
setcolor(Yellow);
OutTextXY(x0-10,y0+5,'0');
OutTextXY(x0-10,5,'Y');
OutTextXY(GetMaxX-12,y0-10,'X');
{treugolnik}
xa:=x0+round(a.x*mx);ya:=y0-round(a.y*mx);
xb:=x0+round(b.x*mx);yb:=y0-round(b.y*mx);
xc:=x0+round(c.x*mx);yc:=y0-round(c.y*mx);
xt1:=x0+round(t1.x*mx);yt1:=y0-round(t1.y*mx);
xt2:=x0+round(t2.x*mx);yt2:=y0-round(t2.y*mx);
xt3:=x0+round(t3.x*mx);yt3:=y0-round(t3.y*mx);
setlinestyle(0,0,1);
setcolor(2);
line(xa,ya,xb,yb);
line(xa,ya,xc,yc);
line(xb,yb,xc,yc);
setcolor(cl);
line(xa,ya,xt1,yt1);
line(xb,yb,xt2,yt2);
line(xc,yc,xt3,yt3);
end;
begin
clrscr;
writeln('Koordinaty po chasovoj strelke [-10..10]:');
repeat
writeln('Vershina A:');
readln(a.x,a.y);
until(a.x>=-10)and(a.x<=10)and(a.y>=-10)and(a.y<=10);
repeat
writeln('Vershina B:');
readln(b.x,b.y);
until(b.x>=-10)and(b.x<=10)and(b.y>=-10)and(b.y<=10);
repeat
writeln('Vershina C:');
readln(c.x,c.y);
Med(a,b,c,ma,mb,mc,dma,dmb,dmc);
writeln('Dlina mediany A=',dma:0:2);
writeln('Dlina mediany B=',dmb:0:2);
writeln('Dlina mediany C=',dmc:0:2);
writeln;
Bis(a,b,c,ba,bb,bc,dba,dbb,dbc);
writeln('Dlina bissektrisy A=',dba:0:2);
writeln('Dlina bissektrisy B=',dbb:0:2);
writeln('Dlina bissektrisy C=',dbc:0:2);
writeln;
write('Press Enter...');
readln;
until(c.x>=-10)and(c.x<=10)and(c.y>=-10)and(c.y<=10);
gd:=0;
initgraph(gd,gm,'');
Draw(getmaxX,getmaxY,a,b,c,ma,mb,mc,12);
setcolor(12);
outtextXY(20,40,'MEDIANY');
setcolor(15);
outtextXY(getmaxX div 2-30,getmaxY-40,'Press Enter...');
readln;
cleardevice;
Draw(getmaxX,getmaxY,a,b,c,ba,bb,bc,14);
setcolor(14);
outtextXY(20,40,'BISSEKTRISY');
setcolor(15);
outtextXY(getmaxX div 2-30,getmaxY-40,'Press Enter...');
readln;
cleardevice;
end.
Добавлено через 1 час 22 минуты
Если вы уже смотрели код до времени последней правки, то замените, я исправил ошибки.

Добавлено через 21 минуту
Добавил высоты.
Код Pascal
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
uses crt,graph;
const t=0.0001;
type point=record
           x,y:real;
           end;
var gd,gm,w,h,cl:integer;
    a,b,c,ma,mb,mc,ba,bb,bc,va,vb,vc:point;
    dma,dmb,dmc:real;
    dba,dbb,dbc:real;
    dva,dvb,dvc:real;
{opredelenie dliny po Geronu}
function Dlina(a,b:point):real;
begin
Dlina:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;
{koordinaty osnovanij i dliny median}
procedure Med(a,b,c:point;var ma,mb,mc:point;var dma,dmb,dmc:real);
begin
ma.x:=(b.x+c.x)/2;ma.y:=(b.y+c.y)/2;
mb.x:=(a.x+c.x)/2;mb.y:=(a.y+c.y)/2;
mc.x:=(a.x+b.x)/2;mc.y:=(a.y+b.y)/2;
dma:=Dlina(a,ma);
dmb:=Dlina(b,mb);
dmc:=Dlina(c,mc);
end;
{koordinaty osnovanij i dliny bissektris}
procedure Bis(a,b,c:point;var ba,bb,bc:point;var dba,dbb,dbc:real);
var l1,l2,l3:real;
begin
l1:=Dlina(a,b);
l2:=Dlina(b,c);
l3:=Dlina(c,a);
ba.x:=b.x+l1*(c.x-b.x)/(l1+l3);
ba.y:=b.y+l1*(c.y-b.y)/(l1+l3);
bb.x:=c.x+l2*(a.x-c.x)/(l1+l2);
bb.y:=c.y+l2*(a.y-c.y)/(l1+l2);
bc.x:=a.x+l3*(b.x-a.x)/(l2+l3);
bc.y:=a.y+l3*(b.y-a.y)/(l2+l3);
dba:=Dlina(a,ba);
dbb:=Dlina(b,bc);
dbc:=Dlina(c,bc);
end;
{koordinaty osnovanij i dliny vysot}
procedure Vys(a,b,c:point;var va,vb,vc:point;var dva,dvb,dvc:real);
var p,l1,l2,l3,u,h,c1,k:real;
begin
l1:=Dlina(a,b);
l2:=Dlina(b,c);
l3:=Dlina(c,a);
p:=(l1+l2+l3)/2;
u:=2*arctan(sqrt((p-l1)*(p-l3)/(p*(p-l2))));
dvb:=l1*sin(u);
c1:=sqrt(l1*l1-dvb*dvb);
if abs(c.x-a.x)<=t then
 begin
  vb.x:=a.x;
  vb.y:=a.y;
 end
else
 begin
  k:=c1/l3;
  vb.x:=a.x+k*(c.x-a.x);
  vb.y:=a.y+k*(c.y-a.y);
 end;
u:=2*arctan(sqrt((p-l2)*(p-l1)/(p*(p-l3))));
dvc:=l2*sin(u);
c1:=sqrt(l2*l2-dvc*dvc);
if abs(a.x-b.x)<=t then
 begin
  vc.x:=b.x;
  vc.y:=b.y;
 end
else
 begin
  k:=c1/l1;
  vc.x:=b.x+k*(a.x-b.x);
  vc.y:=b.y+k*(a.y-b.y);
 end;
u:=2*arctan(sqrt((p-l3)*(p-l2)/(p*(p-l1))));
dva:=l3*sin(u);
c1:=sqrt(l3*l3-dva*dva);
if abs(b.x-c.x)<=t then
 begin
  va.x:=c.x;
  va.y:=c.y;
 end
else
 begin
  k:=c1/l3;
  va.x:=c.x+k*(b.x-c.x);
  va.y:=c.y+k*(b.y-c.y);
 end;
end;
{risovanie}
procedure Draw(w,h:integer;a,b,c,t1,t2,t3:point;cl:integer);
var x0,y0,xa,ya,xb,yb,xc,yc,xt1,yt1,xt2,yt2,xt3,yt3,n,i:integer;
    xmax,ymax,msh:real;
    s:string;
begin
x0:=w div 2;y0:=h div 2;{centr}
xmax:=abs(a.x);{maximum po X}
if abs(b.x)>xmax then xmax:=abs(b.x);
if abs(c.x)>xmax then xmax:=abs(c.x);
ymax:=abs(a.y);{maximum po Y}
if abs(b.y)>ymax then ymax:=abs(b.y);
if abs(c.y)>ymax then ymax:=abs(c.y);
{masshtaby po osyam}
if xmax>ymax then
  begin
   msh:=(h-60)/(xmax*2);
   n:=round(xmax);
  end
else
  begin
   msh:=(h-60)/(ymax*2);
   n:=round(ymax);
  end;
{koordinatnaya setka}
line(0,y0,w,y0);
line(x0,0,x0,h);
setlinestyle(1,0,0);
setcolor(8);
for i:=1 to 2*n do
 begin
  line(0,y0-round(i*msh),w,y0-round(i*msh));
  line(0,y0+round(i*msh),w,y0+round(i*msh));
  line(x0-round(i*msh),0,x0-round(i*msh),h);
  line(x0+round(i*msh),0,x0+round(i*msh),h);
  str(i,s);
  OutTextXY(x0-10,y0-round(i*msh),s);
  OutTextXY(x0-20,y0+round(i*msh),'-'+s);
  OutTextXY(x0+round(i*msh),y0+5,s);
  OutTextXY(x0-round(i*msh)-10,y0+5,'-'+s);
 end;
setcolor(Yellow);
OutTextXY(x0-10,y0+5,'0');
OutTextXY(x0-10,5,'Y');
OutTextXY(GetMaxX-12,y0-10,'X');
{treugolnik}
xa:=x0+round(a.x*msh);ya:=y0-round(a.y*msh);
xb:=x0+round(b.x*msh);yb:=y0-round(b.y*msh);
xc:=x0+round(c.x*msh);yc:=y0-round(c.y*msh);
xt1:=x0+round(t1.x*msh);yt1:=y0-round(t1.y*msh);
xt2:=x0+round(t2.x*msh);yt2:=y0-round(t2.y*msh);
xt3:=x0+round(t3.x*msh);yt3:=y0-round(t3.y*msh);
setlinestyle(0,0,1);
setcolor(2);
line(xa,ya,xb,yb);
line(xa,ya,xc,yc);
line(xb,yb,xc,yc);
setcolor(cl);
line(xa,ya,xt1,yt1);
line(xb,yb,xt2,yt2);
line(xc,yc,xt3,yt3);
end;
begin
clrscr;
writeln('Koordinaty po chasovoj strelke [-10..10]:');
repeat
writeln('Vershina A:');
readln(a.x,a.y);
until(a.x>=-10)and(a.x<=10)and(a.y>=-10)and(a.y<=10);
repeat
writeln('Vershina B:');
readln(b.x,b.y);
until(b.x>=-10)and(b.x<=10)and(b.y>=-10)and(b.y<=10);
repeat
writeln('Vershina C:');
readln(c.x,c.y);
until(c.x>=-10)and(c.x<=10)and(c.y>=-10)and(c.y<=10);
Med(a,b,c,ma,mb,mc,dma,dmb,dmc);
writeln('Dlina mediany A=',dma:0:1);
writeln('Dlina mediany B=',dmb:0:1);
writeln('Dlina mediany C=',dmc:0:1);
writeln('Koordinaty A x=',ma.x:0:1,'  y=',ma.y:0:1);
writeln('Koordinaty B x=',mb.x:0:1,'  y=',mb.y:0:1);
writeln('Koordinaty C x=',mc.x:0:1,'  y=',mc.y:0:1);
writeln;
Bis(a,b,c,ba,bb,bc,dba,dbb,dbc);
writeln('Dlina bissektrisy A=',dba:0:1);
writeln('Dlina bissektrisy B=',dbb:0:1);
writeln('Dlina bissektrisy C=',dbc:0:1);
writeln('Koordinaty A x=',ba.x:0:1,'  y=',ba.y:0:1);
writeln('Koordinaty B x=',bb.x:0:1,'  y=',bb.y:0:1);
writeln('Koordinaty C x=',bc.x:0:1,'  y=',bc.y:0:1);
writeln;
Vys(a,b,c,va,vb,vc,dva,dvb,dvc);
writeln('Dlina vysoty A=',dva:0:1);
writeln('Dlina vysoty B=',dvb:0:1);
writeln('Dlina vysoty C=',dvc:0:1);
writeln('Koordinaty A x=',va.x:0:1,'  y=',va.y:0:1);
writeln('Koordinaty B x=',vb.x:0:1,'  y=',vb.y:0:1);
writeln('Koordinaty C x=',vc.x:0:1,'  y=',vc.y:0:1);
write('Press Enter...');
readln;
 
gd:=0;
initgraph(gd,gm,'');
Draw(getmaxX,getmaxY,a,b,c,ma,mb,mc,12);
setcolor(12);
outtextXY(20,40,'MEDIANY');
setcolor(15);
outtextXY(getmaxX div 2-30,getmaxY-40,'Press Enter...');
readln;
cleardevice;
Draw(getmaxX,getmaxY,a,b,c,ba,bb,bc,14);
setcolor(14);
outtextXY(20,40,'BISSEKTRISY');
setcolor(15);
outtextXY(getmaxX div 2-30,getmaxY-40,'Press Enter...');
readln;
cleardevice;
Draw(getmaxX,getmaxY,a,b,c,va,vb,vc,13);
setcolor(13);
outtextXY(20,40,'VYSOTY');
setcolor(15);
outtextXY(getmaxX div 2-30,getmaxY-40,'Press Enter...');
readln
end.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Ответов Автор Дата
Turbo Pascal по заданным координатам вершин треугольника на плоскости определить площадь треугольника (не используя формулу Герона)
по заданным координатам вершин треугольника на плоскости определить площадь треугольника (не используя формулу Герона)
Turbo Pascal 1 куксгауз 17.09.2013 03:10
Turbo Pascal По координатам вершин определить вид треугольника
Пусть даны координаты трех точек на плоскости.Если они могут быть вершинами треугольника,определите его вид(разносторонний,равнобедренный,равносторонний).Вычислите длины его высот и напечатайте их в...
Turbo Pascal 1 FORZE 22.10.2012 21:55
Turbo Pascal Вычислить периметр треугольника по координатам его вершин
Помогите решить задачи на процедуры в Turbo Pascal! Срочно нужно! Пожалуйста! 2. Составьте программу вычисления периметра треугольника p по координатам его вершин: (x1,y1),(x2,y2), (x3,y3),...
Turbo Pascal 1 LanaSv 05.07.2012 21:48
Turbo Pascal Найти периметр треугольника, заданного координатами своих вершин, определив финкцию для расчета длины отрезка по координатам его вершин.
Найти периметр треугольника, заданного координатами своих вершин, определив финкцию для расчета длины отрезка по координатам его вершин. Помогите решить с использованием процедуры.
Turbo Pascal 1 tsar925 17.04.2012 16:38
Turbo Pascal Заданы длины сторон треугольника. Найти длины высот и медиан
Заданы длины сторон треугольника. Найти длины высот и медиан.
Turbo Pascal 13 stalker19 15.02.2012 17:26
Turbo Pascal Дано координаты вершин треугольника. Найти длины его высот.
Дано координаты вершин треугольника. Найти длины его высот.
Turbo Pascal 3 fhntv24 02.03.2011 13:33
Turbo Pascal Найти периметр треугольника по координатам вершин
найти периметр треугольника АВС, если его координаты A(x1,y1), B(x2,y2), C(x3,y3,)вводятся с клавиатуры. При неправильном вводе значений, вывести на экран сообщение об ошибке и предложением повторно...
Turbo Pascal 1 Trush 19.02.2011 06:52
Turbo Pascal Найти периметр треугольника, заданного координатами своих вершин, определив функцию для расчета длины отрезка по координатам его вершин.
Помогите пожалуйста решить!СПАСИБО! Найти периметр треугольника, заданного координатами своих вершин, определив функцию для расчета длины отрезка по координатам его вершин.
Turbo Pascal 1 hoochie 07.01.2010 15:25
Опции темы

Текущее время: 19:41. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.