Определить, принадлежит ли точка треугольнику - C (СИ)

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

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

Здравствуйте, хоть на форуме уже не раз поднимался вопрос на данную тему, но я не смог найти понятного для себя решения. Есть наброски кода, но вот что то не так, подскажите чего не так
# include "stdio.h"
# include "conio.h"
# include "match.h"
 
void main ()
{
int x, x1, x2, y, y1, y2; //Координаты вершин
int x3, y3; // координаты точки
int a,b,c,a1,b1,c1; // длинна сторон
int p, p1, p2, p3; // полупериметры
int s, s1, s2,s3; // площади
int k; // сумма площадей
printf ("Vvedite koordinati vershun:\n");
scanf ("%d%d%d%d%d%d", &x, &x1, &x2, &y, &y1, &y2);
printf ("Vvedite koordinati to4ki:\n");
scanf ("%d%d", &x3, &y3);
a=(x-x1)+(y-y1); //высчитываем длинну сторон
b=(x1-x2)+(y1-y2); //высчитываем длинну сторон
c=(x2-x)+(y2-y); //высчитываем длинну сторон
p=(a+b+c)/2; // расчитываем полупериметр
s=1/2(p(p-a)*(p-b)*(p-c)); // расчитываем площадь
a1=(x3-x)+(y3-y); //высчитываем длинну сторон
b1=(x3-x1)+(y1-y3); //высчитываем длинну сторон
c1=(x2-x3)+(y3-y2); //высчитываем длинну сторон
p1=(b1+a+a1)/2; // расчитываем полупериметр
p2=(b1+b+c1)/2; // расчитываем полупериметр
p3=(c1+c+a1)/2; // расчитываем полупериметр
s1=1/2(p1(p1-b1)*(p1-a)*(p1-a1)); // расчитываем площадь
s2=1/2(p(p-b1)*(p-b)*(p-c1)); // расчитываем площадь
s3=1/2(p(p-c1)*(p-c)*(p-a1)); // расчитываем площадь
k=s1+s2+s3; // сумма площадей
if (s=k){
printf ("popal");}
else{
printf ("mimo");}
getch ();
return;
}

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

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 и вычисляются площади треугольников, образованных этими вершинами и одной из осей. Затем проверяется, принадлежит ли точка с координатами (xd, yd) треугольнику, и в зависимости от этого выводится YES или NO в файл trian.sol.

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


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

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

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