首页 > 代码库 > <complex>类型
<complex>类型
刷计算几何的时候在lrj模板里发现了奇怪的东西:
(大白书P256)
typedef complex<double> Point;
complex表示的是复数类型
根据MSDN,complex类型的定义是这样的:
template<> class complex<double> {public: complex( double _RealVal = 0, double _ImagVal = 0 ); complex( const complex<double>& _ComplexNum ); explicit complex( const complex<long double>& _ComplexNum ); // rest same as template class complex};
其中_RealVal为实部,_ImagVal为虚部
函数real(p)返回实部,imag(p)返回虚部
复数的两部分正好对应一个点的x坐标和y坐标。所以用complex表示点可以让代码更简洁。
否则就很容易写出这种屎一样的东西 -.-
double Cross(point A,point B) { complex<double> a(A.x,A.y); complex<double> b(B.x,B.y); return (imag(conj(a)*b)); } double Dot(point A,point B) { complex<double> a(A.x,A.y); complex<double> b(B.x,B.y); return real(conj(a)*b); } point Getcrosspoint(line X) { //this:a->b X:X.a->X.b if ((a==X.a)||(a==X.b)) return a; if ((b==X.a)||(b==X.b)) return b; point v(b.x-a.x,b.y-a.y); point w(X.b.x-X.a.x,X.b.y-X.a.y); point u(a.x-X.a.x,a.y-X.a.y); double t=Cross(w,u)/Cross(v,w); point ans(a.x+t*v.x,a.y+t*v.y); return ans; } bool PointOnSeg(point p) { //p a->b point tx(a.x-p.x,a.y-p.y); point ty(b.x-p.x,b.y-p.y); //if ((p==a) || (p==b)) return true; return dcmp(Cross(tx,ty))==0 && dcmp(Dot(tx,ty))<0 ; }
<complex>类型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。