Точка в треугольнике - C (СИ)
Формулировка задачи:
У меня проблема с такой задачей.
Захватив Изумрудный город Урфин Джюс поручил генералу Лану Пироту поставить деревянного солдата в каждый двор города. Все дворы Изумрудного города представляют собой треугольники, солдат должен находиться либо внутри треугольника, либо на его границе. Вам необходимо проверить, справился ли Лан Пирот с поставленной задачей.
Формат входного файла trian.dat
Текстовый файл trian.dat содержит четыре строки. В первых трех строках записаны координаты вершин треугольника - по два целых числа X, Y, разделенных пробелом, в строке (-1000000 ≤ X, Y ≤ 1000000). Гарантируется, что эти три вершины не лежат на одной прямой.
Четвертая строка файла содержит координаты точки, в которой стоит деревянный солдат Урфина Джюса, - два целых числа A, B, разделенных пробелом (-1000000 ≤ A, B ≤ 1000000).
Формат выходного файла trian.sol
Текстовый файл trian.sol должен слово YES, если точка с координатами (А,В) лежит внутри треугольника или на его стороне, и NO в противном случае.
Покажите готовый код или подскажите хотя бы алгоритм.
Решение задачи: «Точка в треугольнике»
textual
Листинг программы
#include <stdio.h> int main() { long long int xa, ya, xb, yb, xc, yc, xd, yd; long long int S1 = 0, S2 = 0, S3 = 0, S4 = 0, S = 0; FILE *fp, *np; fp = fopen("trian.dat", "r"); np = fopen("trian.sol", "w"); fscanf(fp, "%lld %lld", &xa, &ya); fscanf(fp, "%lld %lld", &xb, &yb); fscanf(fp, "%lld %lld", &xc, &yc); fscanf(fp, "%lld %lld", &xd, &yd); S1 = (xb - xa) * (yc - ya) - (xc - xa) * (yb - ya); if(S1 < 0) { S1 = -S1; } S2 = (xb - xa) * (yd - ya) - (xd - xa) * (yb - ya); if(S2 < 0) { S2 = -S2; } S3 = (xc - xb) * (yd - yb) - (xd - xb) * (yc - yb); if(S3 < 0) { S3 = -S3; } S4 = (xd - xa) * (yc - ya) - (xc - xa) * (yd - ya); if(S4 < 0) { S4 = -S4; } S = S2 + S3 + S4; if(S == S1) { fprintf(np, "YES\n"); } else { fprintf(np, "NO\n"); } fclose(fp); fclose(np); return 0; }
Объяснение кода листинга программы
В этом коде выполняется вычисление площади треугольника по координатам вершин и определение, является ли эта площадь положительной или отрицательной. Вот список действий:
- Ввод координат вершин треугольника из файла
trian.dat
. - Вычисление площади треугольника, используя формулу Герона.
- Если площадь отрицательна, то инвертирование знака площади.
- Вывод результата на экран с помощью функции fprintf.
- Закрытие файлов для ввода и вывода.
- Возврат значения 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д