public void DrawFullCarcass() { Wb.Clear(); ////Z - buffer //int[,] Z = new int[Wb.PixelWidth, Wb.PixelHeight]; //for (int i = 0; i < Wb.PixelWidth; i++) //{ // for (int j = 0; j < Wb.PixelHeight; j++) // { // Z[i, j] = Int32.MinValue; // } //} Point[] buffer = new Point[(BetaDo - BetaOt)]; for (int alfa = AlfaOt; alfa < AlfaDo; alfa += resolution) { for (int beta = BetaOt; beta < BetaDo; beta += resolution * 2) { var res = MainModel.Axonometry(MainModel.Func(R, alfa * Math.PI / 180, beta * Math.PI / 180), Alfa * Math.PI / 180, Beta * Math.PI / 180); if (!double.IsNegativeInfinity(pointHorizontal.X)) { MainModel.Line(wb, (int)pointHorizontal.X, (int)pointHorizontal.Y, (int)res.Item1 + Wb.PixelWidth / 2, (int)res.Item2 + Wb.PixelHeight / 2, color);// ,ref Z, (int)res.Item3); if (alfa > 0) { MainModel.Line(wb, (int)buffer[beta].X, (int)buffer[beta].Y, (int)res.Item1 + Wb.PixelWidth / 2, (int)res.Item2 + Wb.PixelHeight / 2, color); } } buffer[beta] = new Point(res.Item1 + Wb.PixelWidth / 2, res.Item2 + Wb.PixelHeight / 2); if (alfa < AlfaDo - resolution) { pointHorizontal = new Point(res.Item1 + Wb.PixelWidth / 2, res.Item2 + Wb.PixelHeight / 2); } else { pointHorizontal.X = double.NegativeInfinity; } } } }
public void DrawHorizontalCarcass(Func <Tuple <double, double, double>, int, Tuple <double, double, double> > scaling, Func <Tuple <double, double, double>, int, int, int, Tuple <double, double, double> > moving, Func <Tuple <double, double, double>, int, Tuple <double, double, double> > rX, Func <Tuple <double, double, double>, int, Tuple <double, double, double> > rY, Func <Tuple <double, double, double>, int, Tuple <double, double, double> > rZ) { Wb.Clear(); ////Z - buffer //int[,] Z = new int[Wb.PixelWidth, Wb.PixelHeight]; //for (int i = 0; i < Wb.PixelWidth; i++) //{ // for (int j = 0; j < Wb.PixelHeight; j++) // { // Z[i, j] = Int32.MinValue; // } //} for (int alfa = AlfaOt; alfa < AlfaDo; alfa += resolution) { for (int beta = BetaOt; beta < BetaDo; beta += resolution * 2) { var res = MainModel.Axonometry(rZ(rY(rX(moving(scaling(MainModel.Func(R, alfa * Math.PI / 180, beta * Math.PI / 180), K), Dx, Dy, Dz), AffineAngleX), AffineAngleY), AffineAngleZ), Alfa * Math.PI / 180, Beta * Math.PI / 180); if (!double.IsNegativeInfinity(pointHorizontal.X)) { MainModel.Line(wb, (int)pointHorizontal.X, (int)pointHorizontal.Y, (int)res.Item1 + Wb.PixelWidth / 2, (int)res.Item2 + Wb.PixelHeight / 2, color);//,ref Z, (int)res.Item3); } if (alfa < AlfaDo - resolution) { pointHorizontal = new Point(res.Item1 + Wb.PixelWidth / 2, res.Item2 + Wb.PixelHeight / 2); } else { pointHorizontal.X = double.NegativeInfinity; } } } }
public void DrawPolygons() { Wb.Clear(); Point[] bufferUp = new Point[(BetaDo - BetaOt)]; Point[] bufferDown = new Point[(BetaDo - BetaOt)]; for (int alfa = AlfaOt; alfa < AlfaDo; alfa += resolution) { for (int beta = BetaOt; beta < BetaDo; beta += resolution) { var res = MainModel.Axonometry(MainModel.Func(R, alfa * Math.PI / 180, beta * Math.PI / 180), Alfa * Math.PI / 180, Beta * Math.PI / 180); bufferDown[beta] = new Point(res.Item1 + Wb.PixelWidth / 2, res.Item2 + Wb.PixelHeight / 2); if (alfa > 1 && beta > 0) { MainModel.Polygon(wb, bufferUp[beta - 1], bufferUp[beta], bufferDown[beta - 1], bufferDown[beta], color); } if (alfa > 0 && beta > 0) { bufferUp[beta - 1] = bufferDown[beta - 1]; } } } }