opengl里的对球形的建模:首先要把球形表式由点组成的模型。现在的问题是:怎么把这个球用点集进行表示。

代码如下:

Java代码
  1. final int UNIT_SIZE=10000;
  2. ArrayList<Integer> alVertix=new ArrayList<Integer>();//存放顶点坐标的ArrayList
  3. final int angleSpan=18;//将球进行单位切分的角度
  4. for(int vAngle=-90;vAngle<=90;vAngle=vAngle+angleSpan){//垂直方向angleSpan度一份
  5. for(int hAngle=0;hAngle<360;hAngle=hAngle+angleSpan)//水平方向angleSpan度一份
  6. {//纵向横向各到一个角度后计算对应的此点在球面上的坐标
  7. double xozLength=scale*UNIT_SIZE*Math.cos(Math.toRadians(vAngle));
  8. int x=(int)(xozLength*Math.cos(Math.toRadians(hAngle)));
  9. int z=(int)(xozLength*Math.sin(Math.toRadians(hAngle)));
  10. int y=(int)(scale*UNIT_SIZE*Math.sin(Math.toRadians(vAngle)));
  11. //将计算出来的XYZ坐标加入存放顶点坐标的ArrayList
  12. alVertix.add(x);alVertix.add(y);alVertix.add(z);
  13. }
  14. }

讲解:

1. 首先把球想成由很多的半径不一样的圆所组成的。把球想像成由很多平形于x,z平面的圆所组成的。

2. x,z轴的圆的角度是由0-360,y轴的变动由-90到90。

3. 在java里,三角函数要用弧度计算,而我们平实一般都是角度来计算。其实不管三角函数用的是角度和弧度,其都是度量的是角的大小,所以对于同一个角,其三角函数的值都是一样的(不管是用角度计算,还是用弧度计算)。所以sin(x)就不要注重其x是角度还是弧度,只要关心,其是由对边/斜边(前题是直角三角形)。

4. 如果对于计算球上每个点的坐标,不太理解,可以在笛卡尔级坐标系里,画一个点,再把这个点进行映射到三个坐标轴上去,就可以了。

注:角度和弧度的理解:http://hi.baidu.com/kent_edwin/blog/item/9425f0029e06967e3812bb28.html


更多相关文章

  1. android使用datepicker计算年龄
  2. Android(安卓)AysncTask 从源码角度简单理解它的使用限制原因
  3. Android(安卓)计算方法运行时间
  4. Android(安卓)基于源码的科学计算器——Calculator浅析
  5. 计算机图书pdf整理及下载链接
  6. [房贷计算器]-升级心得
  7. Android中的TextView 、EditText、Activity、Intent实例小计算器
  8. 【免费讲座】3G/嵌入式/物联网/云计算
  9. VelocityTracker简单用法

随机推荐

  1. Set集合就这么简单!
  2. Unity平台 | 快速集成华为性能管理服务
  3. 模板方法模式在开源代码中应用
  4. 4: zabbix5.0自动发现网站域名并监控访问
  5. 接了烂代码的项目,怎么玩好?
  6. 分享几个写并发题遇到的坑
  7. 如何写高质量的代码(完结)
  8. 多线程基础必要知识点!看了学习多线程事半
  9. 想要的资源就在那,为什么你总是搜不到?
  10. 三十