Сложная такая задача на процедуру
449. Даны действительные числа x1, y1, x2, y2, ..., x6, y6. Точки с координатами (x1, y1), (x2, y2), (x3, y3) рассматриваются как вершины первого треугольника, точки с координатами (x4, y4), (x5, y5), (x6, y6) - второго треугольника. Выяснить, верно, ли что первый треугольник целиком содержится во втором, и если да, определить площадь области, принадлежащей внешнему треугольнику и не принадлежащей внутреннему. (Определить процедуру, позволяющую выяснить, лежат ли две точки в одной полуплоскости относительно заданной прямой, процедуру вычисления расстояния между двумя точками, а также процедуру вычисления площади треугольника по трем сторонам).
|
Цитата:
|
Да, вот процедуры-то, я и не могу сделать. Преподаватель сказал, что нужно через уравнение прямой ax+by+c=0 , где a=y2-y1 b=x2-y2 и далее получаем с либо положительное, либо отрицательное, что дает нам понять лежат ли они в одной полуплоскости или нет. А как это реализовать не знаю.
|
Цитата:
|
Вот, получите:
Код:
Var |
Vladimir_S, спасибо за решение. А вы бы могли хотя бы немного прокомментировать как и что здесь вы сделали, а то я ещё совсем плохо разбираюсь в pascal (я пытаюсь разобраться сама, но завтра уже сдавать, и думаю с комментариями я пойму быстрее)
|
Цитата:
Алгоритм проверки принадлежности вершин внутреннего треугольника к полуплоскости, лежащей по одну сторону прямой, проведенной через вершины внешнего треугольника, таков (булева функция One_Side): 1. Обозначим координаты двух вершин внешнего треугольника (xl1, yl1), (xl2, yl2). 2. Обозначим координаты двух вершин внутреннего треугольника (xp1, yp1), (xp2, yp2). 3. Через точки с координатами (xl1, yl1), (xl2, yl2) проводим прямую, уравнение которой задает внутренняя процедура Line. Формулу прямой, проходящей через две точки плоскости, Вы найдете в любом учебнике аналитической геометрии. 4. Определяем Y-координаты точек найденной прямой, соответствующих Х-координатам вершин внутреннего треугольника xp1 и xp2. Это делает внутренняя функция Y. Обозначим найденные точки Y1 и Y2. 5. Точки с координатами (xp1, yp1), (xp2, yp2) лежат по одну сторону прямой в том и только в том случае, когда знаки разностей (yp1-Y1) и (yp2-Y2) совпадают (либо одна из разностей нулевая). Совпадение знаков проверяем путём исследования знака произведения (yp1-Y1)*(yp2-Y2). Если это произведение неотрицательно, то да - точки лежат по одну сторону (или одна из них принадлежит прямой, что тоже годится). 6. Вертикальную и горизонтальную прямые рассматриваем отдельно. 7. Если координаты всех трёх пар точек внутреннего треугольника относительно всех трёх прямых, проведенных через пары вершин внешнего треугольника (итого - 9 комбинаций) удовлетворяют описанному свойству, то внутренний треугольник не вылезает за границы внешнего и можно считать площади. Если хоть в одной из этих комбинаций условие нарушается - то вылезает. 8. Формулу площади треугольника через координаты вершин можно найти в Интернете. Всё! |
Vladimir_S, здравствуйте, а как программа выполняется, если значения b вдруг равны нулю? Как мы это устраняем? ( в том случае, если координаты стороны треугольника заданы по оси ох?
|
Вложений: 1
Цитата:
Вложение 211134 Или Вы имеете в виду - при проведении прямой? Так ведь я же указал в п.6, что случаи прямых, параллельных координатным осям, рассмотрены отдельно: есть в подпрограмме соответствующее ветвление. |
Vladimir_S, спасибо вам большое) Да, я уже разобралась и всё поняла и задачу сдала)
|
Цитата:
|
А как реализовать данную программу на borland 3.1 c++? Та же задача, только в задании "Определить подпрограммы, необходимые для выяснения взаимного расположения треугольников и вычисления площади треугольника) Заранее спасибо!
|
Часовой пояс GMT +4, время: 21:17. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.