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); }
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); }
private void panel1_Paint(object sender, PaintEventArgs e) { var grafics = e.Graphics; var pen = new Pen(Color.Black); System.Drawing.Point invisible; var points = _house.GetBox(50, panel1.Width / 2, panel1.Height / 2, out invisible, debug); var index = Array.IndexOf(points, invisible); label1.Text = index.ToString(); for (int i = 0; i < debug.Count; i++) { debug[i].Text = String.Format("X: {0} Y: {1} {2}", points[i].X, points[i].Y, debug[i].Text); } var planes = new List <List <int> >() { new List <int>() { 0, 2, 6, 4 }, new List <int>() { 4, 5, 7, 6 }, new List <int>() { 2, 3, 7, 6 }, new List <int>() { 0, 1, 3, 2 }, new List <int>() { 0, 1, 5, 4 }, new List <int>() { 1, 5, 7, 3 }, new List <int>() { 0, 8, 9, 1 }, new List <int>() { 4, 8, 9, 5 } }; foreach (var plane in planes) { var draw = ProjectionTool.GetPoints(points, plane.ToArray()); //if (!draw.Contains(invisible)) grafics.DrawPolygon(pen, draw); } }
private void scrlbarScaling_ValueChanged(object sender, EventArgs e) { ProjectionTool.Scale(_house, scrlbarScaling.Value / 10.0); panel1.Invalidate(); }
private void scrlbarRotateZ_ValueChanged(object sender, EventArgs e) { ProjectionTool.Rotate(_house, scrlbarRotateZ.Value, 2); panel1.Invalidate(); }
private void hScrollBar3_ValueChanged(object sender, EventArgs e) { ProjectionTool.Move(_house, scrlbarMovementZ.Value, 2); panel1.Invalidate(); }