Практика программирования (Бейсик, Си, Паскаль)


Задачи,советы и ответы - часть 48


printf{"\n Введи координаты точки\n");

scanf("%f %f",&x0,&y0);

k012=r(x0,y0,xl,yl,x2,y2);

k312=r(x3,y3,xl,yl,x2,y2);

k023=r(x0,y0,x2,y2,x3,y3);

k123=r(xl,yl,x2,y2,x3,y3);

k013=r(x0,y0,xl,yl,x3,y3);

k213=r(x2,y2,xl,yl,x3,y3);

if(k012*k312>0 && k023*k!23>0 SS k013*k213>0)

{

puts("Точка находится внутри треугольника");

getch();

exit(0);

} if(k012*k312<0 || k023*k123<0 || k013*k213<0)

{

puts("Точка находится вне треугольника"); getch(); exit(O);

}

puts("Точка находится на границе"); getch();

}

/*--------------------------------------*/

int r(float u,float v,float ul,float vl, float u2,float v2)

/* Анализ взаимного расположения точки (U,V) и прямой,

проходящей через точки (U1,V1) и (U2,V2) */

{

float s=(u-ul)*(v2-vl)-(v-vl)*(u2-ul);

if(s>0) return 1;

if(s<0) return -1;

return 0;

}

Программа 2_27.pas

program triangle;

( Анализ взаимного расположения точки и треугольника }

var

Xd,y0,xl,yl,x2,y2,x3,y3:real;

k012, k312,k023,k!23,k013,k213:integer;

function r(u, v,ul, vl,u2, v2:real) :integer;

{ Анализ взаимного расположения точки (U,V) и прямой,

проходящей через точки (U1,V1) и (U2,V2) }

var

s:real;

begin

s: = (u-ul) * (v2-vl)- (v-vl) * (u2-ul) ;

r:=0;

if s>0 then r:=l;

if s<0 then r:=-l;

end;

begin

writeln('Введи координаты вершин треугольника');' readln(xl,yl,х2,у2,хЗ,уЗ);

writeln('Введи координаты точки');

readln(x,у);

k012:=r(x0,y0,xl,yl,x2,y2);

k312:=r(x3,y3,xl,yl,x2,y2);

k023:=r(х0,у0,х2,у2,хЗ,уЗ);

k123:=r(xl,yl,x2,y2,x3,y3);

k013:=r(x0,y0,xl,yl,x3,y3);

k213:=r(х2,у2,х!,у!,хЗ,уЗ);

if (k012*k312>0) and (k023*k!23>0) and (k013*k213>0) then begin

write('Точка находится внутри треугольника');

halt;

end;

if (k012*k312<0) or (k023*k!23<0) or (k013*k213<0) then begin

write ('Точка находится вне треугольника'),' halt; end;

write ('Точка в треугольнике' ) ;

readln;




- Начало -  - Назад -  - Вперед -