Определите, принадлежит ли начало координат треугольнику с заданными вершинами - C (СИ)
Формулировка задачи:
Даны вещественные числа x1, y1, x2, y2, x3, y3. Определите, принадлежит ли начало координат треугольнику с вершинами (x1, y1), (x2, y2), (x3, y3).
Решение задачи: «Определите, принадлежит ли начало координат треугольнику с заданными вершинами»
textual
Листинг программы
#include <stdio.h>
struct point {
double x;
double y;
};
double calc_position(struct point a, struct point b, struct point d)
{
return (d.x - a.x) * (b.y - a.y) - (d.y - a.y) * (b.x - a.x);
}
bool check_side(struct point a, struct point b, struct point c, struct point d)
{
return calc_position(a, b, c) * calc_position(a, b, d) >= 0;
}
int main()
{
struct point a, b, c, d;
a.x = -9;
a.y = 2;
b.x = 5;
b.y = 4;
c.x = -3;
c.y = -10;
d.x = 0;
d.y = 0;
printf( check_side(a,b,c,d) && check_side(b,c,a,d) &&
check_side(c,a,b,d) ? "Принадлежит" : "Не принадлежит");
return 0;
}
Объяснение кода листинга программы
- Включаем файл библиотек стандартного ввода/вывода
- Объявляем структуру point для представления точки в двумерном пространстве
- Определяем функцию calc_position для вычисления скалярного произведения векторов
- Определяем функцию check_side для проверки принадлежности точки к треугольнику
- В функции main создаем и инициализируем переменные структур point для представления вершин треугольника и точки, для которой проверяем принадлежность
- Вызываем функцию check_side с передачей всех вершин треугольника и точки, для которой проверяем принадлежность
- Выводим на экран результат проверки принадлежности точки к треугольнику
- Возвращаем 0, чтобы указать, что программа успешно завершилась