Exemplo n.º 1
0
        /// <summary>
        /// Returns a grid point at the given point.
        /// Assumes the point is within the bounds of the grid.
        /// </summary>
        /// <param name="point"></param>
        /// <param name="result"></param>
        public void GridPointAtUnsafe(Vec3d point, GridPoint3d result)
        {
            point = ToGridSpace(point);

            result.SetWeights(
                zMath.Fract(point.X, out int i0),
                zMath.Fract(point.Y, out int j0),
                zMath.Fract(point.Z, out int k0)
                );

            j0 *= _nx;
            k0 *= _nxy;
            int i1 = i0 + 1;
            int j1 = j0 + _nx;
            int k1 = k0 + _nxy;

            var corners = result.Corners;

            corners[0] = i0 + j0 + k0;
            corners[1] = i1 + j0 + k0;
            corners[2] = i0 + j1 + k0;
            corners[3] = i1 + j1 + k0;
            corners[4] = i0 + j0 + k1;
            corners[5] = i1 + j0 + k1;
            corners[6] = i0 + j1 + k1;
            corners[7] = i1 + j1 + k1;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Returns a grid point at the given point.
        /// Assumes the point is within the bounds of the grid.
        /// </summary>
        /// <param name="point"></param>
        /// <returns></returns>
        public GridPoint3d GridPointAtUnsafe(Vec3d point)
        {
            GridPoint3d result = new GridPoint3d();

            GridPointAtUnsafe(point, result);
            return(result);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Returns a grid point at the given point.
        /// </summary>
        /// <param name="point"></param>
        /// <param name="result"></param>
        public void GridPointAt(Vec3d point, GridPoint3d result)
        {
            point = ToGridSpace(point);

            result.SetWeights(
                zMath.Fract(point.X, out int i0),
                zMath.Fract(point.Y, out int j0),
                zMath.Fract(point.Z, out int k0)
                );

            int i1 = WrapX(i0 + 1);
            int j1 = WrapY(j0 + 1) * _nx;
            int k1 = WrapZ(k0 + 1) * _nxy;

            i0 = WrapX(i0);
            j0 = WrapY(j0) * _nx;
            k0 = WrapZ(k0) * _nxy;

            var corners = result.Corners;

            corners[0] = i0 + j0 + k0;
            corners[1] = i1 + j0 + k0;
            corners[2] = i0 + j1 + k0;
            corners[3] = i1 + j1 + k0;
            corners[4] = i0 + j0 + k1;
            corners[5] = i1 + j0 + k1;
            corners[6] = i0 + j1 + k1;
            corners[7] = i1 + j1 + k1;
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="point"></param>
        /// <returns></returns>
        public Vec3d CoordinateAt(GridPoint3d point)
        {
            var corners = point.Corners;
            var weights = point.Weights;
            var sum     = new Vec3d();

            for (int i = 0; i < 8; i++)
            {
                sum += CoordinateAt(corners[i]) * weights[i];
            }

            return(sum);
        }
Exemplo n.º 5
0
 /// <inheritdoc />
 public sealed override Vec3d ValueAt(GridPoint3d point)
 {
     return(FieldUtil.ValueAt(Values, point.Corners, point.Weights));
 }
Exemplo n.º 6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="point"></param>
 /// <param name="amount"></param>
 public static void IncrementAt(this GridField3d <Vec3d> field, GridPoint3d point, Vec3d amount)
 {
     FieldUtil.IncrementAt(field, point.Corners, point.Weights, amount);
 }
Exemplo n.º 7
0
 /// <inheritdoc/>
 /// <summary>
 ///
 /// </summary>
 /// <param name="point"></param>
 /// <param name="value"></param>
 /// <returns></returns>
 public static void SetAt(this GridField3d <Vec3d> field, GridPoint3d point, Vec3d value)
 {
     FieldUtil.SetAt(field, point.Corners, point.Weights, value);
 }