| 88 | // ============================================== |
| 89 | |
| 90 | Dipole3D Terathon::Partner(const Dipole3D& d) |
| 91 | { |
| 92 | float v2 = d.v.x * d.v.x + d.v.y * d.v.y + d.v.z * d.v.z; |
| 93 | float f = d.p.w * d.p.w - d.m.x * d.m.x - d.m.y * d.m.y - d.m.z * d.m.z - d.v.x * d.p.x - d.v.y * d.p.y - d.v.z * d.p.z; |
| 94 | |
| 95 | return (Dipole3D(d.v.x * v2, |
| 96 | d.v.y * v2, |
| 97 | d.v.z * v2, |
| 98 | |
| 99 | d.m.x * v2, |
| 100 | d.m.y * v2, |
| 101 | d.m.z * v2, |
| 102 | |
| 103 | (d.m.z * d.v.y - d.m.y * d.v.z) * d.p.w + d.v.x * f, |
| 104 | (d.m.x * d.v.z - d.m.z * d.v.x) * d.p.w + d.v.y * f, |
| 105 | (d.m.y * d.v.x - d.m.x * d.v.y) * d.p.w + d.v.z * f, |
| 106 | d.p.w * v2)); |
| 107 | } |
| 108 | |
| 109 | Circle3D Terathon::Partner(const Circle3D& c) |
| 110 | { |