如何使用wpf绘制 圆形,而不是一个 圆形面,这样可以用来绘制同心圆,如下图:
private void drawCircleDemo(int r = 1, int n = 100)
{
int e;
double segmentRad = Math.PI / 2 / (n + 1);
mesh.Positions = new Point3DCollection();
mesh.TriangleIndices = new Int32Collection();
for (e = -n; e <= n; e++)
{
double r_e = r * Math.Cos(segmentRad * e);
double y_e = r * Math.Sin(segmentRad * e);
for (int s = 0; s <= (4 * n + 4 - 1); s++)
{
double z_s = r_e * Math.Sin(segmentRad * s) * (-1);
double x_s = r_e * Math.Cos(segmentRad * s);
mesh.Positions.Add(new Point3D(x_s, y_e, z_s));
}
}
mesh.Positions.Add(new Point3D(0, r, 0));
mesh.Positions.Add(new Point3D(0, -1 * r, 0));
for (e = 0; e < 2 * n; e++)
{
for (int i = 0; i < (4 * n + 4); i++)
{
mesh.TriangleIndices.Add(e * (4 * n + 4) + i);
mesh.TriangleIndices.Add(e * (4 * n + 4) + i + (4 * n + 4));
mesh.TriangleIndices.Add(e * (4 * n + 4) + (i + 1) % (4 * n + 4) + (4 * n + 4));
mesh.TriangleIndices.Add(e * (4 * n + 4) + (i + 1) % (4 * n + 4) + (4 * n + 4));
mesh.TriangleIndices.Add(e * (4 * n + 4) + (i + 1) % (4 * n + 4));
mesh.TriangleIndices.Add(e * (4 * n + 4) + i);
}
}
for (int i = 0; i < (4 * n + 4); i++)
{
mesh.TriangleIndices.Add(e * (4 * n + 4) + i);
mesh.TriangleIndices.Add(e * (4 * n + 4) + (i + 1) % (4 * n + 4));
mesh.TriangleIndices.Add((4 * n + 4) * (2 * n + 1));
}
for (int i = 0; i < (4 * n + 4); i++)
{
mesh.TriangleIndices.Add(i);
mesh.TriangleIndices.Add((i + 1) % (4 * n + 4));
mesh.TriangleIndices.Add((4 * n + 4) * (2 * n + 1) + 1);
}
}
xaml 代码
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D>
<!-- Geometry -->
<GeometryModel3D.Geometry>
<MeshGeometry3D x:Name="mesh" />
</GeometryModel3D.Geometry>
<!-- Foreground brushes -->
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<SolidColorBrush Color="Blue"></SolidColorBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
<!-- Lighting -->
<AmbientLight Color="White" />
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Camera -->
<Viewport3D.Camera>
<PerspectiveCamera Position="0,0,-8" UpDirection="0,1,0" LookDirection="0,0,1" FieldOfView="45" NearPlaneDistance="0.125"/>
</Viewport3D.Camera>
</Viewport3D>
这是一种使用WPF绘制3D圆形的方法:
主要思路是: