Точка в треугольнике - 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;
                    }

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

В этом коде выполняется вычисление площади треугольника по координатам вершин и определение, является ли эта площадь положительной или отрицательной. Вот список действий:

  1. Ввод координат вершин треугольника из файла trian.dat.
  2. Вычисление площади треугольника, используя формулу Герона.
  3. Если площадь отрицательна, то инвертирование знака площади.
  4. Вывод результата на экран с помощью функции fprintf.
  5. Закрытие файлов для ввода и вывода.
  6. Возврат значения 0, что означает успешное выполнение программы.

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


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

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

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