15 struct { double a, b, c; };
20 void FromPoints(Vector3D v1, Vector3D v2, Vector3D v3)
26 normal.CrossProduct(a, b);
27 normal.Normalize(normal);
29 d = -normal.DotProduct(v1);
32 void FromPointsf(Vector3Df v1, Vector3Df v2, Vector3Df v3)
34 Vector3D v1d { (double)v1.x, (double)v1.y, (double)v1.z };
35 Vector3D v2d { (double)v2.x, (double)v2.y, (double)v2.z };
36 Vector3D v3d { (double)v3.x, (double)v3.y, (double)v3.z };
41 normal.CrossProduct(a, b);
42 normal.Normalize(normal);
44 d = -normal.DotProduct(v1d);
47 void MultMatrix(Plane source, Matrix inverseTranspose)
49 a = source.a * inverseTranspose.m[0][0] +
50 source.b * inverseTranspose.m[1][0] +
51 source.c * inverseTranspose.m[2][0] +
52 source.d * inverseTranspose.m[3][0];
53 b = source.a * inverseTranspose.m[0][1] +
54 source.b * inverseTranspose.m[1][1] +
55 source.c * inverseTranspose.m[2][1] +
56 source.d * inverseTranspose.m[3][1];
57 c = source.a * inverseTranspose.m[0][2] +
58 source.b * inverseTranspose.m[1][2] +
59 source.c * inverseTranspose.m[2][2] +
60 source.d * inverseTranspose.m[3][2];
61 d = source.a * inverseTranspose.m[0][3] +
62 source.b * inverseTranspose.m[1][3] +
63 source.c * inverseTranspose.m[2][3] +
64 source.d * inverseTranspose.m[3][3];
67 void IntersectLine(Line line, Vector3D result)
69 double divisor = a * line.delta.x + b * line.delta.y + c * line.delta.z;
71 result.x = (b * line.delta.y * line.p0.x - b * line.delta.x * line.p0.y +
72 c * line.delta.z * line.p0.x - c * line.delta.x * line.p0.z -
73 d * line.delta.x ) / divisor;
75 result.y = (a * line.delta.x * line.p0.y - a * line.delta.y * line.p0.x +
76 c * line.delta.z * line.p0.y - c * line.delta.y * line.p0.z -
77 d * line.delta.y ) / divisor;
79 result.z = (a * line.delta.x * line.p0.z - a * line.delta.z * line.p0.x +
80 b * line.delta.y * line.p0.z - b * line.delta.z * line.p0.y -
81 d * line.delta.z ) / divisor;
84 void IntersectLinef(Line line, Vector3Df result)
86 double divisor = a * line.delta.x + b * line.delta.y + c * line.delta.z;
88 result.x = (float)((b * line.delta.y * line.p0.x - b * line.delta.x * line.p0.y +
89 c * line.delta.z * line.p0.x - c * line.delta.x * line.p0.z -
90 d * line.delta.x ) / divisor);
92 result.y = (float)((a * line.delta.x * line.p0.y - a * line.delta.y * line.p0.x +
93 c * line.delta.z * line.p0.y - c * line.delta.y * line.p0.z -
94 d * line.delta.y ) / divisor);
96 result.z = (float)((a * line.delta.x * line.p0.z - a * line.delta.z * line.p0.x +
97 b * line.delta.y * line.p0.z - b * line.delta.z * line.p0.y -
98 d * line.delta.z ) / divisor);
101 void FromPointNormal(Vector3D normal, Vector3D point)
103 this.normal = normal;
104 d = -(normal.x * point.x + normal.y * point.y + normal.z * point.z);