This documentation is automatically generated by online-judge-tools/verification-helper
This project is maintained by tsutaj
// 3 次元の幾何テンプレ (最低限のもののみ)
// AOJ 2641 でちょっと必要になったので作りました
struct Point3D {
double x, y, z;
};
Point3D operator+(Point3D a, Point3D b) {
return Point3D{a.x+b.x, a.y+b.y, a.z+b.z};
}
Point3D operator-(Point3D a, Point3D b) {
return Point3D{a.x-b.x, a.y-b.y, a.z-b.z};
}
Point3D operator*(double a, Point3D b) {
return Point3D{a*b.x, a*b.y, a*b.z};
}
double abs(Point3D a) {
return sqrt(a.x*a.x + a.y*a.y + a.z*a.z);
}
double cross(Point3D a, Point3D b) {
double ra = a.y * b.z - a.z * b.y;
double rb = a.z * b.x - a.x * b.z;
double rc = a.x * b.y - a.y * b.x;
return sqrt(ra*ra + rb*rb + rc*rc);
}
double dot(Point3D a, Point3D b) {
return a.x*b.x + a.y*b.y + a.z*b.z;
}
#line 1 "geometry/old/gmtr_100_basic_threedim.cpp"
// 3 次元の幾何テンプレ (最低限のもののみ)
// AOJ 2641 でちょっと必要になったので作りました
struct Point3D {
double x, y, z;
};
Point3D operator+(Point3D a, Point3D b) {
return Point3D{a.x+b.x, a.y+b.y, a.z+b.z};
}
Point3D operator-(Point3D a, Point3D b) {
return Point3D{a.x-b.x, a.y-b.y, a.z-b.z};
}
Point3D operator*(double a, Point3D b) {
return Point3D{a*b.x, a*b.y, a*b.z};
}
double abs(Point3D a) {
return sqrt(a.x*a.x + a.y*a.y + a.z*a.z);
}
double cross(Point3D a, Point3D b) {
double ra = a.y * b.z - a.z * b.y;
double rb = a.z * b.x - a.x * b.z;
double rc = a.x * b.y - a.y * b.x;
return sqrt(ra*ra + rb*rb + rc*rc);
}
double dot(Point3D a, Point3D b) {
return a.x*b.x + a.y*b.y + a.z*b.z;
}