Функция проверки двух треугольников на поглощение на плоскости - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго всем вечера! Очень нужна помощь! Необходимо написать функцию проверки двух треугольников на поглощение в R2 Входные данные: 6 точек, по 3 вершины каждый треугольник. Выходные: через return: 1, если один находится полностью внутри другого, и 0 в противном случае. Подскажите, пожалуйста, как это можно осуществить?

Решение задачи: «Функция проверки двух треугольников на поглощение на плоскости»

textual
Листинг программы
  1. #include <stdio.h>
  2. #define set_triangle(t, x0,y0, x1,y1, x2,y2)\
  3. (t).A.x = (x0), (t).A.y = (y0),\
  4. (t).B.x = (x1), (t).B.y = (y1),\
  5. (t).C.x = (x2), (t).C.y = (y2)\
  6.  
  7. typedef struct {
  8.     int x, y;
  9. } point;
  10.  
  11. typedef struct {
  12.     point A, B, C;
  13. } triangle;
  14.  
  15. int is_ptriangle(const point* p, const triangle* tr);
  16. int is_in_triangle(const triangle* tr1, const triangle* tr2);
  17.  
  18.  
  19. int main(void){
  20.     triangle tr1, tr2;
  21.    
  22.     //равнобедренный треугольник в экранных координатах
  23.     set_triangle(tr1, 100,220, 200,100, 300,220);
  24.  
  25.     //прямоугольный треугольник в экранных координатах
  26.     set_triangle(tr2, 90,10, 400,250, 90,250);
  27.    
  28.     if(is_in_triangle(&tr1, &tr2))
  29.         puts("Yes.");
  30.     else
  31.         puts("No!");
  32.     return 0;
  33. }
  34.  
  35. // принадлежность точки треугольнику(обход вершин по часовой стрелке)
  36. int is_ptriangle(const point* p, const triangle* tr){
  37.     int r = (p->x-tr->A.x)*(tr->A.y-tr->B.y) - (p->y-tr->A.y)*(tr->A.x-tr->B.x);
  38.     if(r < 0)
  39.         return 0;
  40.     r = (p->x-tr->B.x)*(tr->B.y-tr->C.y) - (p->y-tr->B.y)*(tr->B.x-tr->C.x);
  41.     if(r < 0)
  42.         return 0;
  43.     r = (p->x-tr->C.x)*(tr->C.y-tr->A.y) - (p->y-tr->C.y)*(tr->C.x-tr->A.x);
  44.     return (r >= 0);
  45. }
  46.  
  47. //проверка вхождения треугольника в треугольник
  48. int is_in_triangle(const triangle* tr1, const triangle* tr2){
  49.     int r;
  50.     r = is_ptriangle(&tr1->A, tr2) &&
  51.         is_ptriangle(&tr1->B, tr2) &&
  52.         is_ptriangle(&tr1->C, tr2);
  53.     if(! r){
  54.         r = is_ptriangle(&tr2->A, tr1) &&
  55.             is_ptriangle(&tr2->B, tr1) &&
  56.             is_ptriangle(&tr2->C, tr1);
  57.     }
  58.     return r;
  59. }

Объяснение кода листинга программы

  1. Создание структуры point для представления точки в двумерном пространстве.
  2. Создание структуры triangle для представления треугольника, используя структуру point.
  3. Объявление функции is_ptriangle для проверки принадлежности точки треугольнику.
  4. Объявление функции is_in_triangle для проверки вхождения одного треугольника в другой.
  5. Задание двух треугольников в экранных координатах.
  6. Проверка вхождения первого треугольника во второй с помощью функции is_in_triangle.
  7. Вывод результата проверки в консоль.
  8. Возвращение 0 в случае, если точка принадлежит треугольнику, и 1 в противном случае.
  9. Проверка принадлежности каждой вершины треугольника второму треугольнику, начиная с вершины A.
  10. Проверка всех трех вершин треугольника во втором треугольнике.
  11. Если точка принадлежит одному из треугольников, проверка принадлежности второму треугольнику, начиная с другой вершины первого треугольника.
  12. Возвращение 1, если точка принадлежит обоим треугольникам, и 0 в противном случае.
  13. Если точка принадлежит одному из треугольников, проверка принадлежности второму треугольнику, начиная с другой вершины первого треугольника.
  14. Возвращение 1, если точка принадлежит обоим треугольникам, и 0 в противном случае.
  15. Возвращение результата проверки вхождения первого треугольника во второй.
  16. Если первый треугольник полностью содержится во втором, проверка вхождения второго треугольника в первый.
  17. Возвращение 1, если второй треугольник полностью содержится в первом, и 0 в противном случае.
  18. Если второй треугольник полностью содержится в первом, проверка вхождения первого треугольника во второй.
  19. Возвращение 1, если первый треугольник полностью содержится во втором, и 0 в противном случае.
  20. Возвращение 1, если второй треугольник полностью содержится в первом, и 0 в противном случае.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы