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

Тема в разделе "Delphi - FAQ", создана пользователем WARRIOR9992005, 6 ноя 2007.

Статус темы:
Закрыта.
  1. WARRIOR9992005

    WARRIOR9992005 Гость

    Здравствуйте товарищи программисты!!!
    Помогите пожалуйста, если не сложно, с задачами на Паскале.
    Даны координаты вершин треугольника Собственно Ax,Bx.Cx Ay,By,Cy и даны координаты произв точки D Dx,Dy Нужно вычислить входит ли данная точка в тело треугольника...
    Я сделал с "Procedure" Преподша говорит мол слишком сложно...помогите пожалуйста...Совсем мозг опух...
    вот мой вариант
    Код (Text):
    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.
     
  2. Black horse

    Black horse Гость

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

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

    Scorpicora Гость

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

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

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

Поделиться этой страницей