Определить пересекает ли прямая треугольник - 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 ... // По разные
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д