示例#1
0
        public System.Drawing.Point[] GetBox(int scale, int centerX, int centerY, out System.Drawing.Point invisible, List <System.Windows.Forms.Label> debug)
        {
            var points     = ProjectionTool.ToArray(_box);
            var projection = ProjectionTool.Projection(points, (double)TypeOfProjection / 2, 45);

            int invisibleIndex = ProjectionTool.FindInvisible(points, debug);

            invisibleIndex = 0;

            switch (invisibleIndex)
            {
            case 0:
                invisibleIndex = 2;
                break;

            case 1:
                invisibleIndex = 3;
                break;

            case 2:
                invisibleIndex = 0;
                break;

            case 3:
                invisibleIndex = 1;
                break;

            case 4:
                invisibleIndex = 6;
                break;

            case 5:
                invisibleIndex = 7;
                break;

            case 6:
                invisibleIndex = 4;
                break;

            case 7:
                invisibleIndex = 5;
                break;
            }

            var result = ProjectionTool.ToPoints(projection, scale, centerX, centerY);

            invisible = result[invisibleIndex];

            return(result);
        }
示例#2
0
        public static int FindInvisible(double[,] points, List <System.Windows.Forms.Label> debug)
        {
            var cameraPoint = new double[, ] {
                { 4, 4, -5 }
            };
            var projectedCameraPoint = ProjectionTool.Projection(cameraPoint, 1, 45);

            var normal          = new Point(1, 1, -1);
            var projectedNormal = ProjectionTool.Projection(cameraPoint, 1, 45);

            var cameraPlain = new Plane(cameraPoint, normal);//new double[] { 1, 1, -1, -2 };

            var testRes = new List <double>();
            var soTest  = ToJagged(points);

            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[0], soTest[2], soTest[6])));
            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[2], soTest[3], soTest[7])));
            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[4], soTest[6], soTest[7])));
            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[0], soTest[1], soTest[5])));
            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[1], soTest[3], soTest[7])));
            testRes.Add(IsVisible(cameraPoint, new Plane(soTest[0], soTest[2], soTest[3])));

            int    maxDistanceIndex = 0;
            double maxDistance      = 0;

            for (int i = 0; i < points.GetLength(0); i++)
            {
                var currentPoint = new Point(points[i, 0], points[i, 1], points[i, 2]);
                var distance     = PlaneDotDistance(currentPoint, cameraPlain);
                if (i < debug.Count)
                {
                    debug[i].Text = String.Format("Distance {0}", distance);
                }
                if (distance > maxDistance)
                {
                    maxDistanceIndex = i;
                    maxDistance      = distance;
                }
            }

            return(maxDistanceIndex);
        }