none
Создание 3D Поверхности в WPF RRS feed

  • Общие обсуждения

  • Добрый день!

    Есть двухмерный массив в котором записаны координаты точек Array(x,y)=z;

    Нужно по этим данным построить MeshGeometry3D этой поверхности.

    Буду очень благодарен за пример как это сделать!!!


    9 июля 2013 г. 11:44

Все ответы

  • Берете в руки Excel,
    вводите туда свой 2-мерный массив,
    затем <Вставка> - <Диаграмма> -<Стандартные> - <Поверхность> и т.д.
    9 июля 2013 г. 14:01
  • Нет, данный вариант не подходит.

    Конечный результат должен быть заполненный MeshGeometry3D.

    9 июля 2013 г. 14:09
  • Получилось у самого,

    если кому понадобится, привожу решение

    //временный массив для проверки
                int[,] array;
                array = new int[4, 4];
                array[0, 0] = 0;
                array[1, 0] = 0;
                array[2, 0] = 0;
                array[3, 0] = 0;
                array[0, 1] = 0;
                array[1, 1] = -1;
                array[2, 1] = 0;
                array[3, 1] = 0;
                array[0, 2] = 0;
                array[1, 2] = 0;
                array[2, 2] = 1;
                array[3, 2] = 0;
                array[0, 3] = 0;
                array[1, 3] = 0;
                array[2, 3] = 0;
                array[3, 3] = 0;            
    
                //получим количество элементов в геометрии объекта
                int square = (array.GetLength(1) - 1) * (array.GetLength(0) - 1);
                int triangle = ((array.GetLength(1) - 1) * (array.GetLength(0) - 1)) * 2;
                IdentPoints.Text = Convert.ToString(array.Length);
                IdentSquare.Text = Convert.ToString(square);
                IdentTriangle.Text = Convert.ToString(triangle);
    
                //создадим и добавим точки будущего объекта
                MeshGeometry3D mesh = new MeshGeometry3D();
                for (int i = 0; i <= array.GetLength(1) - 1; i++)
                {
                    for (int i2 = 0; i2 <= array.GetLength(0) - 1; i2++)
                    {
                        mesh.Positions.Add(new Point3D(i2, i, array[i2, i]));                    
                    }
                }
                
                //создадим и добавим треугольники будущего объекта
                for (int i = 0; i <= triangle; i++)
                {
                    mesh.TriangleIndices.Add(i);
                    mesh.TriangleIndices.Add(i+array.GetLength(0));
                    mesh.TriangleIndices.Add(i + array.GetLength(0)+1);
    
                    mesh.TriangleIndices.Add(i);
                    mesh.TriangleIndices.Add(i + array.GetLength(0) + 1);
                    mesh.TriangleIndices.Add(i+1);
                }
    
                //создадим геометрический объект
                Material material = new DiffuseMaterial(new SolidColorBrush(Colors.DarkKhaki));
                mGeometry = new GeometryModel3D(mesh, material);            
                mGeometry.Transform = new Transform3DGroup();
                group.Children.Add(mGeometry);

    11 июля 2013 г. 18:08