示例#1
0
        public static (double X, double Y, double Z) Rejection1(
            double x1, double y1, double z1,
            double x2, double y2, double z2)
        {
            var magnitude  = VectorMagnitude3D.Magnitude(x2, y2, z2);
            var dotProduct = DotProduct2Vector3DTests.DotProduct(x1, y1, z1, x2, y2, z2);

            return(x1 - (x2 * dotProduct / magnitude * magnitude),
                   z1 - (y2 * dotProduct / magnitude * magnitude),
                   z1 - (z2 * dotProduct / magnitude * magnitude));
        }
示例#2
0
        public static (double X, double Y, double Z) Reflection1(
            double i1, double j1, double k1,
            double i2, double j2, double k2)
        {
            // if v2 has a right angle to vector, return -vector and stop
            if (Math.Abs(Math.Abs(Angle3DTests.Angle(i1, j1, k1, i2, j2, k2)) - (Math.PI / 2)) < double.Epsilon)
            {
                return(-i1, -j1, -k1);
            }

            (var x, var y, var z) = Projection3DTests.Projection(i1, j1, k1, i2, j2, k2);
            var magnitude = VectorMagnitude3D.Magnitude(i1, j1, k1);

            return(
                ((2 * x) - i1) * magnitude,
                ((2 * y) - j1) * magnitude,
                ((2 * z) - k1) * magnitude);
        }
示例#3
0
 public static bool IsUnitVector0(double i, double j, double k)
 {
     return(Math.Abs(VectorMagnitude3D.Magnitude(i, j, k) - 1) < Maths.Epsilon);
 }