public static cls2D_Picture drawTopsFromObjectFile(List <cls3D_Point> points) { cls2D_Picture pointsImage = new cls2D_Picture(1800, 1500); // создаем фон изображения for (int i = 0; i < points.Count - 1; i++) { cls3D_Point temp = points[i]; pointsImage.setPixel(temp.X, temp.Y, new clsRGB(255, 0, 0)); // рисуем ранее записанные точки } return(pointsImage); }
// подсчет барицентрических координат public void Calculating_lambda_coefficients(cls3D_Point screenPoint) { double x0 = polygon[0].X; double x1 = polygon[1].X; double x2 = polygon[2].X; double y0 = polygon[0].Y; double y1 = polygon[1].Y; double y2 = polygon[2].Y; double y = screenPoint.Y; double x = screenPoint.X; Lambda0 = ((x1 - x2) * (y - y2) - (y1 - y2) * (x - x2)) / ((x1 - x2) * (y0 - y2) - (y1 - y2) * (x0 - x2)); lambda1 = ((x2 - x0) * (y - y0) - (y2 - y0) * (x - x0)) / ((x2 - x0) * (y1 - y0) - (y2 - y0) * (x1 - x0)); lambda2 = ((x0 - x1) * (y - y1) - (y0 - y1) * (x - x1)) / ((x0 - x1) * (y2 - y1) - (y0 - y1) * (x2 - x1)); }
// считываем и записываем вершины public static List <cls3D_Point> loadTopsFromObjectFileForLineTrans() { lines = File.ReadAllLines("Test.obj"); // считывание информации из файла for (int i = 0; i < lines.Length; i++) { words = lines[i].Split(' '); if (words[0] == "v") // ищем вершины { // CultureInfo.InvariantCulture позволяет читать десятичные числа как 0.хххх, а не 0,ххх x = double.Parse(words[1], CultureInfo.InvariantCulture); // считываем врешины y = double.Parse(words[2], CultureInfo.InvariantCulture); z = double.Parse(words[3], CultureInfo.InvariantCulture); cls3D_Point point = new cls3D_Point(x, y, z, 5000, 600); // инициализируем точку по координатам pointsForLineTrans.Add(point); // записываем в лист точку } } return(pointsForLineTrans); // возвращаем массив точек }
// конструктор internal clsPolygon(cls3D_Point p1, cls3D_Point p2, cls3D_Point p3) { this.points[0] = p1; this.points[1] = p2; this.points[2] = p3; }