#include<stdio.h>
#include<math.h>
#define N 2
double mianji(double x1,double y1,double x2,double y2,double x3,double y3);//计算三角形面积
double getLength(double a1,double b1,double a2,double b2);//计算两点之间的距离
double getShortestLength(double x0,double y0, double x1,double y1,double x2,double y2);//计算点到线段的距离
void main()
{
int i,k=0;
double x[N],y[N],z[N],n,m,chang=0,g=0,h=0,s=0,area2=0,a,b,area,area1;
for(;;)
{
printf("输入这个点的横坐标和纵坐标:");
scanf("%lf %lf",&n,&m);
printf("输入横坐标:");
for(i=0;i<N;i++)
scanf("%lf",&x[i]);
printf("输入纵坐标:");
for(i=0;i<N;i++)
scanf("%lf",&y[i]);
for(k=0;k<N-1;k++)
z[k]=getShortestLength(n,m,x[k], y[k],x[k+1],y[k+1]);
z[N-1]=getShortestLength(n,m,x[N-1], y[N-1],x[0],y[0]);
chang=z[0];
for(k=1;k<N;k++)
{
if(chang>z[k])
chang=z[k];}
for(i=0;i<N;i++){
g+=x[i];
h+=y[i];}
a=g/N;
b=h/N;
for(i=0;i<N-1;i++){
area=mianji(x[i],y[i],x[i+1],y[i+1],a,b);
s+=area;}
area=mianji(x[0],y[0],x[N-1],y[N-1],a,b);
s+=area;
for(i=0;i<N-1;i++){
area1=mianji(x[i],y[i],x[i+1],y[i+1],n,m);
area2+=area1;}
area1=mianji(x[0],y[0],x[N-1],y[N-1],n,m);
area2+=area1;
printf("%lf %lf",s,area2);
printf("\n");
if(area2-s<0.001)
printf("%lf",chang-2*chang);
else
printf("%lf",chang);
}
}
double mianji(double x1,double y1,double x2,double y2,double x3,double y3)//计算三角形面积
{
double l1,l2,l3,q,e;
l1=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
l2=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
l3=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
q=(l1+l2+l3)/2;
e=sqrt(q*(q-l1)*(q-l2)*(q-l3));
return e;
}
double getLength(double a1,double b1,double a2,double b2)//计算两点之间的距离
{
double result;
result = sqrt((a1-a2)*(a1-a2) + (b1-b2)*(b1-b2));
return result;
}
double getShortestLength(double x0,double y0, double x1,double y1,double x2,double y2)//计算点到线段的距离
{
double a,b,c; // 边长
double d ; //垂线段长度
double A,B,C; //斜线表达式系数
double result ;
//1 求a,b,c 子功能
a = getLength(x1,y1,x2,y2);
b = getLength(x0,y0,x2,y2);
c = getLength(x0,y0,x1,y1);
//2 判断 B角是否钝角
if( a*a + c*c - b*b <= 0) //钝角
{
result = c;
}else{ //锐角
if( a*a + b*b - c*c <=0 ) //判断 C是否为钝角
{
result = b;
}else{ //双锐角
A = y1-y2;
B = x2-x1;
C = x1*y2 - x2*y1;
d =fabs ( A*x0 + B*y0 +C ) / sqrt( A*A + B*B );
result = d;
}
}
return result;
}
原文地址:http://blog.csdn.net/u013116579/article/details/38339843