Определить попадает ли точка внутрь треугольника - Turbo Pascal (33728)
Формулировка задачи:
Помогите пожалуйстаааа!!! Даны действительные числа x1, y1, x2, y2, x3, y3. Находится ли точка с координатами (x,y) внутри треугольника с вершинами (x1, y1), (x2, y2), (x3, y3)? Подсказка: соедините точку (x,y) с вершинами треугольника; рассмотрите площади четырех треугольников. Определите функции для вычисления длины отрезка и площади треугольника и используйте эти функции.
Подсказка: соедините точку (x,y) с вершинами треугольника; рассмотрите площади четырех треугольников. Определите функции для вычисления длины отрезка и площади треугольника и используйте эти функции.
ну хоть маааааленькую идею((((
Решение задачи: «Определить попадает ли точка внутрь треугольника»
textual
Листинг программы
uses crt; const t=0.001; {определение длины стороны} function Dlina(x1,y1,x2,y2:real):real; begin Dlina:=sqrt(sqr(x1-x2)+sqr(y1-y2)); end; {определение площади по Герону} function Plosh(a,b,c:real):real; var p:real; begin p:=(a+b+c)/2; Plosh:=(sqrt(p*(p-a)*(p-b)*(p-c))); end; var x1,y1,x2,y2,x3,y3,x,y,a,b,c,xa,xb,xc,s,s1,s2,s3:real; begin clrscr; repeat writeln('Введите координаты X,Y вершин треугольника:'); writeln('1: ');readln(x1,y1); writeln('2: ');readln(x2,y2); writeln('3: ');readln(x3,y3); a:=Dlina(x1,y1,x2,y2); b:=Dlina(x2,y2,x3,y3); c:=Dlina(x1,y1,x3,y3); {если площадь=0, не треугольник} if Plosh(a,b,c)<t then writeln('Это не треугольник! Повторите ввод.'); until Plosh(a,b,c)>=t; writeln('Ведите координаты X,Y точки внутри треугольника: '); readln(x,y); {вычислим длины сторон от точки до вершин треугольника} xa:=Dlina(x1,y1,x,y); xb:=Dlina(x2,y2,x,y); xc:=Dlina(x3,y3,x,y); {проверка внутри или нет} s:=Plosh(a,b,c);{площадь данного треугольника} s1:=Plosh(a,xa,xb);{1 маленький} s2:=Plosh(b,xb,xc);{2} s3:=Plosh(c,xc,xa);{3} if abs((s1+s2+s3)-s)<t then writeln('Точка D лежит внутри треугольника!') {если площади равны с заданной точностью} else writeln('Точка D не лежит внутри треугольника!');{не равны} readln end.
Объяснение кода листинга программы
- Подключается библиотека crt.
- Определяются константа t и функции Dlina и Plosh.
- Объявляются переменные x1, y1, x2, y2, x3, y3, x, y, a, b, c, xa, xb, xc, s, s1, s2, s3.
- Запускается цикл repeat-until. В каждой итерации пользователю предлагается ввести координаты X, Y вершин треугольника.
- После ввода координат вычисляются длины сторон a, b, c с помощью функции Dlina.
- Проверяется условие Plosh(a,b,c)<t. Если оно истинно, выводится сообщение
Это не треугольник! Повторите ввод.
- Вычисляются площади s, s1, s2, s3 с помощью функции Plosh.
- Проверяется условие abs((s1+s2+s3)-s)<t. Если оно истинно, выводится сообщение
Точка D лежит внутри треугольника!
- Если площади равны с заданной точностью, выводится сообщение
Точка D не лежит внутри треугольника!
- Цикл повторяется до тех пор, пока Plosh(a,b,c)>=t.
- После окончания цикла выводится сообщение
Ведите координаты X,Y точки внутри треугольника:
. - Пользователю предлагается ввести координаты X,Y точки.
- Вычисляются длины сторон xa, xb, xc с помощью функции Dlina.
- Проверяется условие abs((s1+s2+s3)-s)<t.
- Выводится сообщение
Точка D лежит внутри треугольника!
илиТочка D не лежит внутри треугольника!
в зависимости от результата проверки.