Нужно найти ошибку в коде

Задача: Для 3 точек на плоскости, заданных своими координатами, определить принадлежит ли начало координат образованному треугольнику. я считал так: Заданная точка соединяется отрезками с вершинами треугольника. Если площадь исходного треугольника равна сумме площадей образовавшихся трёх треугольников, то считается, что точка принадлежит треугольнику. Вот что получилось:
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
 SysUtils,
 InOut;
 
var
 x1,y1,x2,y2,x3,y3,CA,BA,CB,P,S,OA,OB,Mp1,Ms1,OC,Mp2,Ms2,Mp3,Ms3: Extended;
 
 
begin
 SetConsoleTitleCyr('Тарабрин Владимир 15 группа вариант №8');
 SetConsoleCP_1251;
 WriteLn('введите координаты (x,y) первой точки');
 ReadLN(x1,y1);
 WriteLn('введите координаты (x,y) второй точки');
 ReadLn(x2,y2);
 WriteLn('введите координаты (x,y) третьей точки');
 ReadLn(x3,y3);
 CA := Sqrt(Sqr(x2-x1)+Sqr(y2-y1));
 BA := Sqrt(Sqr(x2-x3)+Sqr(y2-y3));
 CB := Sqrt(Sqr(x3-x1)+Sqr(y3-y1));
 P := CA+BA+CB;
 S := Sqrt(P*(P-CA)*(P-BA)*(P-CB));
 OA := Sqrt(Sqr(x2)+Sqr(y2));
 OB := Sqrt(Sqr(x3)+Sqr(y3));
 Mp1 := (BA+OA+OB)/2;
 Ms1 := Sqrt(Mp1*(Mp1-BA)*(Mp1-OA)*(Mp1-OB)); 
 OC := Sqrt(Sqr(x1)+Sqr(y1));
 Mp2 := (OC+OB+CB)/2;
 Ms2 := Sqrt(Mp2*(Mp2-OB)*(Mp2-OC)*(Mp2-CB));
 Mp3 := (OC+OA+CA)/2;
 Ms3 := Sqrt(Mp3*(Mp3-OC)*(Mp3-OA)*(Mp3-CA));
 if abs(S-Ms1-Ms2-Ms3)<=0.001
 then
 Writeln('Начало координат принадлежит области треугольника')
 else
 Writeln('Начало координат не принадлежит области треугольника');
 ReadLn;
end.
Программа запускаеться считает но всё время выводит что точка не принадлежит области, помогите пожалуйста найти ошибку
9 ответов

Ау, помощь нужна оч срочна, Помогите


вот мой вариант
type Tpoint= record
 x:Integer;
 y:Integer;
 end;
var t:array [1..3] of tpoint;
 i:Integer;
 s1,s2,s3,s4:Real;
function s(x1,y1,x2,y2,x3,y3:real):Real;
var a,b,c,p:Real;
begin
a:=sqrt(sqr(x1-x2)+ sqr(y1-y2));
b:=sqrt(sqr(x2-x3)+ sqr(y2-y3));
c:=sqrt(sqr(x3-x1)+ sqr(y3-y1));
p:=(a+b+c)/2;
s:=Sqrt(p*(p-a)*(p-b)*(p-c));
end;

begin
 for i:=1 to 3 do
 begin
 Readln(t[i].x);
 Readln(t[i].y);
 end;
 s1:= s(t[1].x,t[1].y,t[2].x,t[2].y,t[3].x,t[3].y);
 s2:= s(0,0,t[2].x,t[2].y,t[3].x,t[3].y);
 s3:=s(t[1].x,t[1].y,0,0,t[3].x,t[3].y);
 s4:=s(t[1].x,t[1].y,t[2].x,t[2].y,0,0);

 if Abs(s1-(s2+s3+s4))<0.1 then writeln('Yes')
 else Writeln('no');
 readln;
end.


Знаете в чём проблема мне можно использовате только те операции которые я привёл всякие function и массивы нельзя, так как не это надо в универ сдать а мы этого не проходили пока что,(я на 1 курсе) и как следствие ни чего больше использовать не разрешает


Знаете в чём проблема
знаю! у вас рабочая программа попробуйте ввести (-1,1) (1,1) (0,8) мне она выдала
'Начало координат не принадлежит области треугольника'


Пардон я не множко не так сказал, она всегда выводит что не принадлежит области(первый пост поправил) а вы попробуйте ввести (1,1)(1,-1)(-1,-1) он выведет что не принадлежит, а на самом деле очень даже принадлежит


попробуйте ввести (1,1)(1,-1)(-1,-1)
вот ваш косяк
P := CA+BA+CB;
а должно быть
P := (CA+BA+CB)/2;
и сразу ответ
'Начало координат принадлежит области треугольника'


а мне надо чтобы она лежала либо в области либо на сторонах и выводила что принадлежит, я пробовал любые набора например(1;4.5)(2;-1.5)(-1.5;-2.5)специально начертил, и всё равно пишет не принадлежит


пост №9 еще раз внимательно читаем


ой действительно проглядел ща исправлю, больше косяков не видите?