• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Если кто может помогите с упрощением задачки...

  • Автор темы WARRIOR9992005
  • Дата начала
Статус
Закрыто для дальнейших ответов.
W

WARRIOR9992005

Здравствуйте товарищи программисты!!!
Помогите пожалуйста, если не сложно, с задачами на Паскале.
Даны координаты вершин треугольника Собственно Ax,Bx.Cx Ay,By,Cy и даны координаты произв точки D Dx,Dy Нужно вычислить входит ли данная точка в тело треугольника...
Я сделал с "Procedure" Преподша говорит мол слишком сложно...помогите пожалуйста...Совсем мозг опух...
вот мой вариант
Код:
program Petrakovski;
var q,w,p,ax,bx,cx,dx,ay,by,cy,dy:real;
per1,per2,per3,per4:real;
procedure Zapoln;
begin
write('Koordinaty A ');
readln(ax, ay);
write('Koordinaty B ');
readln(bx, by);
write('Koordinaty C ');
readln(cx,cy);
write('Koordinaty D ');
readln(dx,dy);
end;
procedure Ploshad(n:integer);
var d1,d2,d3,per:real;
begin
d1:=sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));
d2:=sqrt((cx-bx)*(cx-bx)+(cy-by)*(cy-by));
d3:=sqrt((ax-cx)*(ax-cx)+(ay-cy)*(ay-cy));
per:=(d1+d2+d3)/2;
per:=sqrt(per*(per-d1)*(per-d2)*(per-d3));
if n=1 then per1:=per else
if n=2 then per2:=per else
if n=3 then per3:=per else
if n=4 then per4:=per;
end;
procedure Zamena(x:integer);
begin
if x=1 then
begin
q:=cx;
W:=cy;
cx:=dx;
cy:=dy;
end else
if x=2 then
begin
q:=ax;
w:=ay;
ax:=dx;
ay:=dy;
end else
if x=3 then
begin
q:=bx;
w:=by;
bx:=dx;
by:=dy;
end;
end;
procedure Sravn;
begin
if per1 = p then
Writeln('Yes') else
Writeln('No'); end;
function Okrug(z:real):real;
var a:integer;
begin
z:=z/10*1000;
a:=round(z);
z:=a/100;
Okrug:=z;
end;
begin
Zapoln;
Ploshad(1);
Zamena(1);
Ploshad(2);
cx:=q;
cy:=w;
p:=per2;
Zamena(2);
Ploshad(3);
p:=p+per3;
ax:=q;
ay:=w;
Zamena(3);
Ploshad(4);
p:=p+per4;
p:=Okrug(p);
per1:=Okrug(per1);
Sravn;
readln;
end.
 
B

Black horse

Всё намного проще, :) . Нужно Посмотреть лежит ли точка по одну сторону от трёх прямых задаваемых треугольником.
Для этого нужно вспомнить уравнение прямой вида:(x1-x)*(y2-y1)-(y1-y)*(x2-x1)=0, где x,y - координаты точки, x1,y1 и x2,y2 - точки через которую проходит прямая.

Подставляешь в уравнение своё dx, dy - и если получатся одинаковые знаки, значит лежит внутри.
 
S

Scorpicora

Оу! Я в свое время тоже голову ломала над этой задачей ;) Решила, но довольно сложным способом (Через сумму углов с вершиной в точке D. Если она 360 градусов - точка D лежит в треугольнике, а если меньше, то снаружи).

Для: Black horse
спасибо, хоть кто-то подсказал нормальное решение :eek:
 
G

Guest

у меня эти задачки уже в горле сидят ;)
в 9 лет пошол в так называемую "Станцию Юных Техников", там через сколькото лет начали учить бесик(как раз на подобие задачи...), затем пришол в коледж пол года вот этих задачах сидели опять..., потом выгнали за прогулы, пошол в лицей... и опять бесик... ПИСЕЦ!... я на него уже смотреть немогу)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!