returnintersection(u,v);
}
point perpencenter(point a,point b,pointc){
lineu,v;
u.a=c;
u.b.x=u.a.x-a.yb.y;
u.b.y=u.a.ya.x-b.x;
v.a=b;
v.b.x=v.a.x-a.yc.y;
v.b.y=v.a.ya.x-c.x;
returnintersection(u,v);
}
//到三角形三顶点距离的平方和最小的点
//三角形内到三边距离之积最大的点
point barycenter(point a,point b,point c){
lineu,v;
u.a.x=(a.xb.x)/2;
u.a.y=(a.yb.y)/2;
u.b=c;
v.a.x=(a.xc.x)/2;
v.a.y=(a.yc.y)/2;
v.b=b;
returnintersection(u,v);
}
point fermentpoint(point a,point b,pointc){
pointu,v;
doublestep=fabs(a.x)fabs(a.y)fabs(b.x)fabs(b.y)fabs(c.x)fabs(c.y);
inti,j,k;
u.x=(a.xb.xc.x)/3;
u.y=(a.yb.yc.y)/3;
while(step>1e-10)
for (k=0;k<10;step/=2,k)
for(i=-1;i<=1;i)
for (j=-1;j<=1;j){
v.x=u.xstep*i;
v.y=u.ystep*j;
if(distance(u,a)distance(u,b)distance(u,c)>distance(v,a)distance(v,b)distance(v,c))
u=v;
}
returnu;
}
//三维几何函数库
#include <math.h>
#define eps 1e-8
#define zero(x)(((x)>0?(x):-(x))<eps)
struct point3{double x,y,z;};
struct line3{point3 a,b;};
struct plane3{point3 a,b,c;};
point3 xmult(point3 u,point3 v){
point3ret;
ret.x=u.y*v.z-v.y*u.z;
ret.y=u.z*v.x-u.x*v.z;
ret.z=u.x*v.y-u.y*v.x;
returnret;
}
double dmult(point3 u,point3 v){
returnu.x*v.xu.y*v.yu.z*v.z;
}
point3 subt(point3 u,point3 v){
point3ret;
ret.x=u.x-v.x;
ret.y=u.y-v.y;
ret.z=u.z-v.z;
returnret;
}
point3 pvec(plane3 s){
returnxmult(subt(s.a,s.b),subt(s.b,s.c));
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-34960-31.html
最后宋茜的镜头好美