コード例 #1
0
        // lattice point == узел решетки
        public static DataSource CreateSpiral(double width = 1, double height = 1, double depth = 2, int latticeCountX = 100, int latticeCountY = 100, int latticeCountZ = 200)
        {
            FuncDataSource3D <Vector3D> dataSource = new FuncDataSource3D <Vector3D>(latticeCountX, latticeCountY, latticeCountZ,
                                                                                     (i, j, k) =>
            {
                var xyAngle = 2 * Math.PI * j / latticeCountY;

                if (xyAngle < 0)
                {
                    xyAngle += 2 * Math.PI;
                }
                else if (xyAngle > 2 * Math.PI)
                {
                    xyAngle -= 2 * Math.PI;
                }

                Debug.WriteLine(xyAngle);

                Point3D result = new Point3D(
                    width / 2.0 / latticeCountX * i * Math.Cos(xyAngle),
                    height / 2.0 / latticeCountX * i * Math.Sin(xyAngle),
                    depth / latticeCountZ * (k + xyAngle / (2 * Math.PI)));

                return(result);
            },
                                                                                     (i, j, k) =>
            {
                //double x = i - latticeX / 2.0;
                //double y = j - latticeY / 2.0;
                //var xyAngle = Math.Atan2(y, x);

                var xyAngle = 2 * Math.PI * j / latticeCountY;

                var vector = new Vector3D(
                    width / 2.0 / latticeCountX * i * Math.Cos(xyAngle),
                    width / 2.0 / latticeCountY * i * Math.Sin(xyAngle),
                    0);
                var perpendicular = Vector3D.CrossProduct(vector, new Vector3D(0, 0, depth / latticeCountZ / 2.0));
                perpendicular.Z   = 0.1;

                perpendicular.Normalize();
                perpendicular *= 0.1;

                return(perpendicular);
            });

            return(dataSource);
        }
コード例 #2
0
		// lattice point == узел решетки
		public static DataSource CreateSpiral(double width = 1, double height = 1, double depth = 2, int latticeCountX = 100, int latticeCountY = 100, int latticeCountZ = 200)
		{
			FuncDataSource3D<Vector3D> dataSource = new FuncDataSource3D<Vector3D>(latticeCountX, latticeCountY, latticeCountZ,
				(i, j, k) =>
				{
					var xyAngle = 2 * Math.PI * j / (double)(latticeCountY);

					if (xyAngle < 0)
						xyAngle += 2 * Math.PI;
					else if (xyAngle > 2 * Math.PI)
						xyAngle -= 2 * Math.PI;

					Debug.WriteLine(xyAngle);

					Point3D result = new Point3D(
						width / 2.0 / latticeCountX * i * Math.Cos(xyAngle),
						height / 2.0 / latticeCountX * i * Math.Sin(xyAngle),
						depth / latticeCountZ * (k + xyAngle / (2 * Math.PI)));

					return result;
				},
				(i, j, k) =>
				{
					//double x = i - latticeX / 2.0;
					//double y = j - latticeY / 2.0;
					//var xyAngle = Math.Atan2(y, x);

					var xyAngle = 2 * Math.PI * j / (double)(latticeCountY);

					var vector = new Vector3D(
						width / 2.0 / latticeCountX * i * Math.Cos(xyAngle),
						width / 2.0 / latticeCountY * i * Math.Sin(xyAngle),
						0);
					var perpendicular = Vector3D.CrossProduct(vector, new Vector3D(0, 0, depth / latticeCountZ / 2.0));
					perpendicular.Z = 0.1;

					perpendicular.Normalize();
					perpendicular *= 0.1;

					return perpendicular;
				});

			return dataSource;
		}