Треугольник задан вершинами. Принадлежит ли заданная точка (x,y) указанному треугольнику? - C (СИ)
Формулировка задачи:
Треугольник задан вершинами (x1,y1), (x2,y2), (x3,y3). Принадлежит ли заданная точка (x,y) указанному треугольнику.
Решение задачи: «Треугольник задан вершинами. Принадлежит ли заданная точка (x,y) указанному треугольнику?»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float Dow(float ax,float ay,float bx,float by){
float Storona=pow((pow((ax-bx),2.0)+pow((ay-by),2.0)),1/2.);
return Storona;
}
float Plosha(float ax,float ay,float bx,float by,float cx,float cy){
float a=Dow(bx,by,cx,cy);
float b=Dow(ax,ay,cx,cy);
float c=Dow(ax,ay,bx,by);
float Pp=(a+b+c)/2;
float S=pow(Pp*(Pp-a)*(Pp-b)*(Pp-c),1/2.);
return S;
}
int Perev(float ax,float ay,float bx,float by,float cx,float cy,float dx,float dy){
float SV=Plosha(ax,ay,bx,by,cx,cy);
float S1=Plosha(ax,ay,bx,by,dx,dy);
float S2=Plosha(ax,ay,dx,dy,cx,cy);
float S3=Plosha(dx,dy,bx,by,cx,cy);
float Ss=S1+S2+S3;
Ss*=1000;
Ss=(int)Ss;
Ss/=1000.0;
if ((SV<Ss+0.01)&&(SV>Ss-0.01)) return 1;
else return 0;
}
int main()
{
int n,i,kilkist=0;
float ax,ay,bx,by,cx,cy,dx,dy;
// Vvedenia
//printf("S=%f",Plosha(1,1,3,2,3,3));
printf("Vvedit poparno koordinaty tochok cherez probil:\n");
printf("Vveditb koordunatu A:");
scanf("%f%f",&ax,&ay);
printf("Vveditb koordunatu B:");
scanf("%f%f",&bx,&by);
printf("Vveditb koordunatu C:");
scanf("%f%f",&cx,&cy);
//---------
printf("Vveditb kilkist tochok:");
scanf("%d",&n);
printf("Vvedit koordinaty tochok D:\n");
for(i=0;i<n;i++)
{
printf("Tochka %d: ",i+1);
scanf("%f",&dx);
scanf("%f",&dy);
kilkist+=Perev(ax,ay,bx,by,cx,cy,dx,dy);
//printf("%i",kilkist);
}
printf("Kilkist=%i",kilkist);
//-------
//printf("%d",Perev(ax,ay,bx,by,cx,cy,dx[0],dy[0]));
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется функция Dow, которая вычисляет длину стороны треугольника по формуле полученной из теоремы Пифагора
- Определяется функция Plosha, которая вычисляет площадь треугольника по формуле Герона
- Определяется функция Perev, которая проверяет принадлежит ли заданная точка к треугольнику
- В функции main считываются координаты вершин треугольника и количество точек для проверки
- Задаются координаты точек для проверки
- Вызывается функция Perev для каждой точки проверки и суммируется результат
- Выводится общее количество точек, принадлежащих треугольнику