两个向量的位置关系
第一个向量总是水平向右,第二个向量有n种方向,且其具备内循环特性。
double cross {vector a,vector b,}
return a.x*b.y-a.y*b.x
double area2{point a,point b,point c}
return cross(b-a,c-a)
向量旋转
vector rotate{vector a, double rad}
return vector {a.x*cos(rad)-a.y*sin(rad),a.x*sin(rad)+a.y*cos(rad)}
计算共轭复数
double dot {vector a,vector b}{return real(conj(a)*b)
double cross {vector a, vector b,}{return imag(conj(a)*b)}\
vector rorate {vector a,double rad}{return a*exp(point)(0,rad)):}
如何计算多边形的有效面积
double convexpolygonarea(point*p,int n)
double area=0
for (int i=1,i<n;i++)
area+=cross{p[i]-p[0];p[i+1]-p[0]}
return area/2
圆相关的计算
直线和圆的交点
int linecricleintersection(line l, circle c,double t1,double t2,
vector <point>&sol){
double a=l.v.x,b=l.p.x-c.c.x,c=l.v.y,d=l.p.y-c.c.y
double e=a*a+c*c;f=2*(a*b+c*d),g=b*b+d*d-c.r*c.r;
double delta=f*f-4e*g
if (dcmp(delta)<0) return 0
if (dcmp(delta)==0){
t1=t2=-f/(2*e);sol.oush_back(l.point(ti))
return i
t1=(-f-sqrt(delta)/(2*e);sol.push_back(l.point(t1));
t2=(-f+sqrt(delta)/(2*e);sol.push_back(l.point(t2)));
return 2
计算向量极角的方法
double angle {vector v}{return atan2(v.y,v.x):}