Определить пересекает ли прямая треугольник - C (СИ)

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

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

Моё задание звучит так, найти ближайшее расстояние от прямой до треугольника(при этом нужно указать ошибки типа: треугольник врождён в точку, прямая врождена в точку, треугольник врождён в прямую, прямая пересекает треугольник и тд.) Я сделал всё кроме одного, пересекает ли прямая треугольник? Как мне это вывести? Ниже будет приложен код может поможет для наглядности, можете скинуть код для определения пересекает ли прямая треугольник? Если пересекает вывести на экран 0.00 (типа расстояние нулевое).
#include <stdio.h>
#include <stdlib.h>
#include "stdafx.h"
#include "testing.h"
#include <math.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    int x_k; //x - для координаты *K*
    int y_k; //y - для координаты *K*
 
    int x_m; //x - для координаты *M*
    int y_m; //y - для координаты *M*
 
    int x_a; //x - для координаты *A*
    int y_a; //y - для координаты *A*
 
    int x_b; //x - для координаты *B*
    int y_b; //y - для координаты *B*
 
    int x_c; //x - для координаты *C*
    int y_c; //y - для координаты *C*
    
    double A,B,C;
    
    double kool, kool1, kool2;
 
    int DO = 1000, OT = -1000; // Diapazon_do = 1000, Diapazon_ot = -1000 --Это диапазон координат
     
    TESTING
 
    input_printf ("Input 10 nomber:");
    scanf ("%d %d %d %d %d %d %d %d %d %d", &x_k, &y_k, &x_m, &y_m, &x_a, &y_a, &x_b, &y_b, &x_c, &y_c);// Ввод десяти координат для точек
    
    //Проверяем врождён ли треугольник в линию 
    if (abs(x_a == y_a && x_b == y_b && x_c == y_c))
    {
        error_printf ("invalid input data");
        WAIT_ANY_KEY
        return (0);
    }
    //Првоеряем врождён ли треугольник в линию по горизонтали либо по вертикали
    if (x_a == x_b && x_a == x_c && x_b == x_c || y_a == y_b && y_a == y_c && y_b == y_c)
    {
        error_printf ("invalid input data");
        WAIT_ANY_KEY
        return (0);
    }
 
    //Проверяем врождена ли прямая в точку
    if (x_k == x_m && y_k == y_m) 
    {
        error_printf ("invalid input data");
        WAIT_ANY_KEY
        return (0);
    }
 
    A = y_m-y_k;
    B = x_m-x_k;
    C = (y_m-y_k)*(-x_k)-((x_m-x_k)*(-y_k));
    
    kool = abs(A * x_a + B * y_a + C)/sqrt(pow((double)A, 2)+pow((double)B, 2));
    kool1 = abs(A * x_b + B * y_b + C)/sqrt(pow((double)A, 2)+pow((double)B, 2));
    kool2 = abs(A * x_c + B * y_c + C)/sqrt(pow((double)A, 2)+pow((double)B, 2));
    
    if (kool < kool1 && kool < kool2)
    {
    printf("%0.2f", kool);
    }
    if (kool1 < kool && kool1 < kool2)
    {
    printf("%0.2f", kool1);
    }
    if (kool2 < kool && kool < kool1)
    {
    printf("%0.2f", kool2);
    }
 
    WAIT_ANY_KEY
 
    return 0;
}

Решение задачи: «Определить пересекает ли прямая треугольник»

textual
Листинг программы
if (kolo*kolo1 > 0 && kolo*kolo2 > 0) ... // по одну сторону
else ... // По разные

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

12   голосов , оценка 3.833 из 5
Похожие ответы