// анал геом посвящается следущая программа, т.к. идея с площадами была нещадно украдена
// за два часа, как я до не додумался, то вот следующий алгоритм, но пока не полный, чуть позже, мб, доделаю
function find_x_y (xm, ym, x, y, x1, y1, x2, y2, ixmin, iymin, ixmax, iymax: real): boolean; //с начала нахождение точки пересечения с двумя прямыми (основания (пусть верш 1, 2) и прям( m и 3 верш))
begin// потом смотрит находится ли точка в треугольнике(соответствует ixmin, iymin. ixmax iymax)
var k,k1, xfunc, yfunc:real;
k:=(y1-y)/(x1-x);
k1:=(ym-y2)/(xm-x2);
xfunc:=(kx-k1x+y2-y)/(k-k1);
yfunc:=y2+k1*(xfunc-x2);
if (xfunc>=ixmin) and (xfunc<=ixmax) and (yfunc>=iymin) and (yfunc<=iymax) then find_x_y:= True else find_x_y:=False;
end;
function find_x_y1 (xm, ym, x, y, x1, y1, x2, y2, ixmin, iymin, ixmax, iymax: real): boolean; //с начала нахождение точки пересечения с двумя прямыми (основания (пусть верш 1, 2) и прям( m и 3 верш))
begin// потом смотрит находится ли точка в треугольнике(соответствует ixmin, iymin. ixmax iymax)
var k,k1, xfunc, yfunc:real;
k:=(y2-y)/(x2-x);
k1:=(ym-y1)/(xm-x1);
xfunc:=(k1x1-kx+y-y1)/(k1-k);
yfunc:=y1+k1*(xfunc-x1);
if (xfunc>=ixmin) and (xfunc<=ixmax) and (yfunc>=iymin) and (yfunc<=iymax) then find_x_y1:= True else find_x_y1:=False;
end;
var ix, iy, x, y: array of real;
begin
SetLength(x, 3);
SetLength(iy, 3);
SetLength(y, 3);
SetLength(ix, 3);
writeln(‘Введите координаты точек треугольника, такие, что их ординаты не равны и абсциссы тоже’);
for var i:=0 to 2 do begin
readln(x[i], y[i]);
ix[i]:=x[i];
iy[i]:=y[i];
end;
var a:=sqrt(sqr(x[0]-x[1])+sqr(y[0]-y[1]));
var b:=sqrt(sqr(x[0]-x[2])+sqr(y[0]-y[2]));
var c:=sqrt(sqr(x[2]-x[1])+sqr(y[2]-y[1]));
var bo:=(a+b>c) and (a+c>b) and (c+b>a);
if (x[0]<>x[1]) and (x[2]<>x[1]) and (x[0]<>x[2]) and (y[0]<>y[1]) and (y[2]<>y[1]) and (y[0]<>y[2]) then
if bo then
begin
sort(iy); sort(ix);
var xm:=readreal(‘Введите абсциссу точки M, такую, чтобы xm<>x1,x2,x3’);
var ym:=readreal(‘Введите ординату точки M, такую, чтобы ym<>y1,y2,y3’);
if (xm<>x[1]) and (xm<>x[2]) and (xm<>x[0]) and (ym<>y[1]) and (ym<>y[2]) and (ym<>y[0]) then
if (xm<ix[0]) or (xm>x[2]) or (ym<y[0]) or (ym>y[2]) then writeln('Точка вне треугольника') else
begin writeln('Теперь приступим к анал геом!');
if find_x_y1(xm, ym, x[0], y[0], x[1], y[1], x[2], y[2], ix[0], iy[0], ix[2], iy[2]) and find_x_y(xm, ym, x[0], y[0], x[1], y[1], x[2], y[2], ix[0], iy[0], ix[2], iy[2]) then
writeln ('Точка лежит в треугольнике! или на границе, кто знает?!')
else writeln('ДАже анал геом не помогла этой точке лежать в треугольнике или на границе, это фейл');
end
else writeln('Вы печалити меня')
end
else writeln('Вы не прошли защиту от дураков..')
else writeln(‘Уныние - страшный грех, лучше встанте из-за компьютера и пробежитесь кружок вокруг вашего микрорайона/города’);
end.
Есть небольшой фейл( насчет функций ), они обе соответсвуют друг другу, просто там идут некоторые вычисления, и очень сильно лень копаться, где должне быть какой параметр, а вообще можно обойтись одной, но трудно