Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Задача на турбо си++(геометрия, графика)

Автор: -Юлия- 19.02.2008 0:50

Уважаемый, у меня есть такая задача: задаются три точки(А,Б,С), надо нарисовать треугольник, найти точку пересечения медиан(точка Д) и закрасить треугольник АДБ. после часового вояния я поняла что моя программа не работает на некоторых тестах, а именно координаты точки д считаются неправильныи образом. Прошу вашей помощи и советов. код прилагается:

Код

#include<stdio.h>
#include<graphics.h>
#include<math.h>
main()
{
int g=DETECT,m,xa,xb,xc,ya,yb,yc;
float xl,yl,xm,ym,la,da,bm,db,ab,s,p,xd,yd,k1,k2,b1,b2,k;
initgraph (&g,&m,"c:\\bc\\bgi");
scanf("%d %d %d %d %d %d",&xa,&ya,&xb,&yb,&xc,&yc);
xl=(xb+xc)/2;
yl=(yb+yc)/2;
printf("%f %f",xl,yl);
xm=(xa+xc)/2;
ym=(ya+yc)/2;
printf("%f %f",xm,ym);
la=sqrt((xa-xl)*(xa-xl)+(ya-yl)*(ya-yl));
da=la/3*2;
bm=sqrt((xb-xm)*(xb-xm)+(yb-ym)*(yb-ym));
db=bm/3*2;
ab=sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb));
xd=2*(xa+xl)/3;
yd=2*(ya+yl)/3;
p=(da+db+ab)/2;
s=sqrt(p*(p-da)*(p-db)*(p-ab));
printf("S=%f\n%f %f",s,xd,yd);

line(320,1,320,479);
line(1,240,639,240);
xa=xa+320;
ya=-ya+240;
xb=xb+320;
yb=-yb+240;
xc=xc+320;
yc=-yc+240;
xd=xd+320;
yd=-yd+240;
xm=xm+320;
ym=-ym+240;
xl=xl+320;
yl=-yl+240;
line(xa,ya,xb,yb);
line(xa,ya,xc,yc);
line(xb,yb,xc,yc);
line(xa,ya,xl,yl);
line(xb,yb,xm,ym);
outtextxy(xa,ya,"A");
outtextxy(xb,yb,"B");
outtextxy(xc,yc,"C");
outtextxy(xd,yd,"D");
outtextxy(xm,ym,"M");
outtextxy(xl,yl,"L");

return 0;
}

Автор: klem4 19.02.2008 1:40

Раздел не тот, переношу в Другие языки.

Автор: -Юлия- 19.02.2008 16:20

Подскажите хотя бы идею нахождения точки пересечения медиан, пож-ста, горю (огнетушитель не предлагать).

Автор: мисс_граффити 19.02.2008 20:35

1. находишь середины сторон
2. находишь уравнения 2 медиан (прямые, проходящие через найденные точки и вершины)
3. находишь точку их пересечения.

Автор: -Антон- 12.03.2008 15:26

Цитата(мисс_граффити @ 19.02.2008 16:35) *

1. находишь середины сторон
2. находишь уравнения 2 медиан (прямые, проходящие через найденные точки и вершины)
3. находишь точку их пересечения.

не подскажете как это сделать?
просто у меня почти аналгичная задача =)