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