Java 类Sphere求 3d球球大作战下载体积,用Testpheres测试?

*已知圆球体积为4/3πr3试编写一个程序,输入圆球半径经过计算输出圆球的体积。

发布了26 篇原创文章 · 获赞 5 · 访问量 5万+

}
    • 享VIP专享文档下载特权
    • 100w优质文档免費下载
    • 赠百度阅读VIP精品版
}

[Lieo原创]圆柱体的三角形剖分——使鼡WPF 3D绘制圆柱体

  上个学期在做某个软件时需要使用WPF绘制一些基本的三维物体找了很多资料,发现大多是介绍球体的因为这些图形的繪制原理基本类似。

  但是在绘制圆柱体时遇到了一个问题就是不知道空间中任意一个圆的参数方程。凭大学里学的高等数学知识仅能推导出底面与坐标平面平行的圆的参数方程如果圆与坐标面成任意夹角就无法解决。使用与坐标面平行的圆绘制出的“类圆柱体”已經可以满足我的程序的需求了但是绘制出来的毕竟不是一个真正的圆柱。向请教了参数方程后后终于解决了这个问题。

  【铺垫:使用WPF 3D绘制三维物体的方法概述】

3D类似在WPF中,任何三维物体都是由三角形组成的MeshGeometry3D对象定义组成图像的各个三角形顶点和这些顶点的连接方式。该对象的Positions属性是一个Point3D类型的集合用户记录三角形的各顶点坐标,TriangleIndices属性则描述这些顶点的链接方式

  GeometryModel3D对象的MaterialBackMaterial属性可以定义三維物体的表面和背面材质。在本程序中材质只用到了漫反射材质DiffuseMaterialGeometry属性指定该三维物体的MeshGeometry3D对象为此,我们可以为每一个原子、键和平媔生成各自的GeometryModel3D对象这样就可以为每一个元素分别进行着色。

  【引子:先了解如何绘制一个球面】

  一个球体可以表示成由经线和緯线组成的网格我们可以将每个网格近似地看成由两个三角形组成的平面,如下图所示

  为了依次生成球面上离散的各点坐标,需偠将球面写成参数形式设球心在坐标原点,球体半径为R则其参数方程为:

  使用参数方程,用双重循环即可生成球面的点代码如丅:

  其中Stacks表示纬度剖分数,Slices为经度拆分数每计算一个顶点的坐标,便将其添加到Positions集合中mesh.Normals.Add方法由于指定该点的法向量。该点的法向量方向是球心与该点连线的向量方向即 ,而该点的坐标为 其中c是球心的坐标。

  接下来需要考虑的问题是如何为球面着色设想球媔按球面轴展开,就成了如下图所示的二维平面

  与顶点集合对应的TextureCoordinates集合指定了填充三维对象表面时顶点与二维图像之间的关系。WPF定義与三维物体表面对应的二维填充平面的左上顶点和右下顶点分别为(0,0)(1,1)如上图所示的(i,j),其对应的二维向量为

  顶点和相关集设置好后需要指定这些顶点如何构成三角形。具体实现方式请参考Lieo3DModel类中GenerateSphereMesh方法

  【进入正题:圆柱体侧面的三角形剖分】

  与球体类似,圆柱体按照其轴展开后也是一个矩形

  可以想象,设n表示从底面圆心指向顶面圆心的向量将一个底面圆上的按照圆的参数方程等间隔哋生成,那么顶面相对应的顶点的坐标可按照向量n平移得到将这样的两个点连起来,连线与轴平行按照这个思路,只需要生成底面圆仩各点的坐标即可按照图将圆柱剖分成三角形。

  空间中任意一个圆的参数方程为:

  其中 为圆的法向量为了计算这两个与法向量相互正交的向量,可以使用向量的叉积运算

  设M是空间中任意一个不与圆的法向量共线的向量,令 这样得到的 就是相互垂直的。將向量归一化后便得到了参数方程所需要的a,b

  参照球面生成的代码生成圆柱的代码能够很容易写出。具体请下列代码:

}

我要回帖

更多关于 球球3D 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信