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


         

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


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;

Содержание  Назад  Вперед