21 void calc() { rz2=x*x+y*y; rz=sqrt(rz2); }
22 void calc(
double _x,
double _y) { x=_x; y=_y; rz2=x*x+y*y; rz=sqrt(rz2); }
23 void calc(
Point2D const &a) { x=a.x; y=a.y; rz2=a.rz2; rz=a.rz; }
24 double dist2(
Point2D &a) {
return (x-a.x)*(x-a.x)+(y-a.y)*(y-a.y); }
25 double dist(
Point2D &a) {
return sqrt(dist2(a)); }
27 Point2D() : x(0.),y(0.),rz(0.),rz2(0.) { }
28 Point2D(
double _x,
double _y) { calc(_x,_y); }
42 void calc() { Point2D::calc(); r=sqrt(rz2+z*z); }
43 void calc(
double _x,
double _y,
double _z) { Point2D::calc(_x,_y); z=_z; r=sqrt(rz2+z*z); }
44 void calc(
Point3D const &_a) { Point2D::calc(_a); z=_a.z; r=_a.r; }
46 double dist2(
Point3D &a) {
return Point2D::dist2(a)+(z-a.z)*(z-a.z); }
47 double dist(
Point3D &a) {
return sqrt(dist2(a)); }
57 Point3D(
double _x,
double _y,
double _z) :
Point2D(_x,_y) { z=_z; r=sqrt(rz2+z*z); }
60 double rdist(
Point3D &a) {
return fabs(a.r-r); }
63 bool IsNear(
float px,
float py,
float pz,
float tolerance=5){
64 if(fabs(px-x)+fabs(py-y)+fabs(pz-z)<tolerance)
80 double dot(
Vector3D &a) {
return x*a.x+y*a.y+z*a.z; }
81 double module() {
return sqrt(x*x+y*y+z*z); }
82 void divide(
double a) { x/=a; y/=a; z/=a; }
83 void mult(
double a) { x*=a; y*=a; z*=a; }
85 double length2()
const {
return x*x+y*y+z*z; }
88 Point3D p(a*x+b.x,a*y+b.y,a*z+b.z);
93 Point3D p(x+_a.x,y+_a.y,z+_a.z);
100 x*v1.z+y*v2.z+z*v3.z);
111 static const double RADDEG;
119 double rsq = hypot(a.x,a.y);
131 double sum_x,sum_y,sum_x2,sum_y2,sum_xy;
139 sum_x=sum_y=sum_x2=sum_y2=sum_xy=0.;
143 void add(
double x,
double y){
152 a=(n*sum_xy-sum_x*sum_y)/(n*sum_x2-sum_x*sum_x);
154 md=(sum_y2+a*a*sum_x2+n*b*b+2*a*b*sum_x-2*a*sum_xy-2*b*sum_y)/n;
167 MinMax() : min(100000), max(-100000) { }
168 void init() { min=100000; max=-100000; }
177 #define ARSIZE(x) (sizeof(x)/sizeof(x[0]))
184 double angle_dist(
double t1,
double p1,
double t2,
double p2);