16 Func<double, double, double, double> scalarField3D,
17 double xMin,
double xMax,
18 double yMin,
double yMax,
19 double zFixed,
int resolution,
20 double? px =
null,
double? py =
null,
double? pz =
null,
21 double[] gradient =
null)
23 ViewPort.Children.Clear();
24 ViewPort.Children.Add(
new DefaultLights());
26 double dx = (xMax - xMin) / resolution;
27 double dy = (yMax - yMin) / resolution;
28 var meshBuilder =
new MeshBuilder(
false,
false);
30 for (
int i = 0; i < resolution; i++)
32 for (
int j = 0; j < resolution; j++)
34 double x0 = xMin + i * dx;
36 double y0 = yMin + j * dy;
39 double z00 = scalarField3D(x0, y0, zFixed);
40 double z10 = scalarField3D(x1, y0, zFixed);
41 double z11 = scalarField3D(x1, y1, zFixed);
42 double z01 = scalarField3D(x0, y1, zFixed);
45 new Point3D(x0, y0, z00),
46 new Point3D(x1, y0, z10),
47 new Point3D(x1, y1, z11),
48 new Point3D(x0, y1, z01)
53 var mesh = meshBuilder.ToMesh();
54 var material = MaterialHelper.CreateMaterial(Colors.Cyan);
55 var geom =
new GeometryModel3D { Geometry = mesh, Material = material, BackMaterial = material };
56 ViewPort.Children.Add(
new ModelVisual3D { Content = geom });
59 if (px.HasValue && py.HasValue && pz.HasValue)
61 var sphere =
new SphereVisual3D
63 Center =
new Point3D(px.Value, py.Value, pz.Value),
64 Radius = (xMax - xMin) * 0.02,
67 ViewPort.Children.Add(sphere);
70 var gridXY =
new GridLinesVisual3D
76 Center =
new Point3D(0, 0, 0),
77 Normal =
new Vector3D(0, 0, 1),
80 ViewPort.Children.Add(gridXY);
83 var gridXZ =
new GridLinesVisual3D
89 Center =
new Point3D(0, 0, 0),
90 Normal =
new Vector3D(0, 1, 0),
91 Fill = Brushes.DimGray
93 ViewPort.Children.Add(gridXZ);
96 var gridYZ =
new GridLinesVisual3D
102 Center =
new Point3D(0, 0, 0),
103 Normal =
new Vector3D(1, 0, 0),
104 Fill = Brushes.DarkGray
106 ViewPort.Children.Add(gridYZ);