3D画一个圆柱

代码和前面画圆差不多,就只有DrawCylinder.java代码有变化;

 

圆柱你们认为怎么画了?直接说吧,你可以把他看成一个平行水平面的圆沿垂直方向平移后的效果,这样就得到了圆柱的两个底面,侧面也可以上下圆的点与点之间画三角形,当然也会有误差,所以圆的点越多,误差越小,就圆像圆柱。   下面来看看代码吧。

 

package wyf.lgz;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.util.ArrayList;

import javax.microedition.khronos.opengles.GL10;

public class DrawCylinder
{
 private FloatBuffer myVertexBuffer;//顶点坐标缓冲
 
 int vCount;//顶点数量
 
 float length;//圆柱长度
 float circle_radius;//圆截环半径
 float degreespan;  //圆截环每一份的度数大小
 int col;//圆柱块数
 
 public float mAngleX;
 public float mAngleY;
 public float mAngleZ;
 
 public DrawCylinder(float length,float circle_radius,float degreespan,int col)
 {
  this.circle_radius=circle_radius;
  this.length=length;
  this.col=col;
  this.degreespan=degreespan;
  
  float collength=(float)length/col;//圆柱每块所占的长度
  
  ArrayList<Float> val=new ArrayList<Float>();//顶点存放列表
  
  for(float circle_degree=360.0f;circle_degree>0.0f;circle_degree-=degreespan)//循环行
  {
   int j=0;
   //for(int j=0;j<col;j++)//循环列
   {
    float x1 =(float)(j*collength-length/2);
    float y1=(float) (circle_radius*Math.sin(Math.toRadians(circle_degree)));
    float z1=(float) (circle_radius*Math.cos(Math.toRadians(circle_degree)));
    
    float x2 =(float)(j*collength-length/2);
    float y2=(float) (circle_radius*Math.sin(Math.toRadians(circle_degree-degreespan)));
    float z2=(float) (circle_radius*Math.cos(Math.toRadians(circle_degree-degreespan)));
    
    float x3 =(float)((j+1)*collength-length/2);
    float y3=(float) (circle_radius*Math.sin(Math.toRadians(circle_degree-degreespan)));
    float z3=(float) (circle_radius*Math.cos(Math.toRadians(circle_degree-degreespan)));
    
    float x4 =(float)((j+1)*collength-length/2);
    float y4=(float) (circle_radius*Math.sin(Math.toRadians(circle_degree)));
    float z4=(float) (circle_radius*Math.cos(Math.toRadians(circle_degree)));
    
    val.add(x1);val.add(y1);val.add(z1);//每条线两个顶点确定,有6条线,共12个顶点。
    val.add(x2);val.add(y2);val.add(z2);
    
    val.add(x2);val.add(y2);val.add(z2);
    val.add(x4);val.add(y4);val.add(z4);
    
    val.add(x4);val.add(y4);val.add(z4);
    val.add(x1);val.add(y1);val.add(z1);
    
    val.add(x2);val.add(y2);val.add(z2);
    val.add(x3);val.add(y3);val.add(z3);
    
    val.add(x3);val.add(y3);val.add(z3);
    val.add(x4);val.add(y4);val.add(z4);
    
    val.add(x4);val.add(y4);val.add(z4);
    val.add(x2);val.add(y2);val.add(z2);
   }
  }
  
  vCount=val.size()/3;//确定顶点数量
  
  //顶点
  float[] vertexs=new float[vCount*3];
  for(int i=0;i<vCount*3;i++)
  {
   vertexs[i]=val.get(i);
  }
  ByteBuffer vbb=ByteBuffer.allocateDirect(vertexs.length*4);
  vbb.order(ByteOrder.nativeOrder());
  myVertexBuffer=vbb.asFloatBuffer();
  myVertexBuffer.put(vertexs);
  myVertexBuffer.position(0);
 }
 
 public void drawSelf(GL10 gl)
 {
  gl.glRotatef(mAngleX, 1, 0, 0);//旋转
  gl.glRotatef(mAngleY, 0, 1, 0);
  gl.glRotatef(mAngleZ, 0, 0, 1);
  
  gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//打开顶点缓冲
  gl.glVertexPointer(3, GL10.GL_FLOAT, 0, myVertexBuffer);//指定顶点缓冲
  
  gl.glColor4f(0, 0, 0, 0);//设置绘制线为黑色
  gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, vCount);//绘制图像
  
  gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
 }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中要在一个图中绘制多个圆柱体,可以使用Cylinder函数结合plot3函数来实现。 首先,需要定义圆柱体的参数,包括底面圆的半径、圆柱体的高度以及绘制圆柱体个数。 假设圆柱体个数为n,我们可以定义一个存储圆柱体参数的矩阵param,其中每一行表示一个圆柱体的半径和高度。 接下来,我们需要在一个新的图像窗口中创建一个3D坐标系,可以使用figure函数和axes函数。 然后,通过循环遍历param矩阵中的每一行,使用Cylinder函数绘制每个圆柱体。 遍历过程中,需要根据当前参数确定圆柱体的底面坐标和顶面坐标,并使用plot3函数将其连接起来,形成一个完整的圆柱体。最后,添加合适的标签和标题,以及设置视图样式,使图像更加清晰。 下面是具体的MATLAB代码实现: ```MATLAB % 定义圆柱体参数 param = [1 5; 2 4; 3 3]; % 圆柱体半径和高度 n = size(param, 1); % 圆柱体个数 % 创建新的图像窗口 figure; axes('DataAspectRatioMode', 'manual'); axis([-10 10 -10 10 0 10]); % 设置坐标轴范围 hold on; view(3); % 设置视角为3D % 循环绘制圆柱体 for i = 1:n radius = param(i, 1); height = param(i, 2); [X, Y, Z] = Cylinder(radius, height); % 绘制圆柱体 mesh(X, Y, Z); end % 添加标签和标题 xlabel('X'); ylabel('Y'); zlabel('Z'); title('多个圆柱体'); hold off; ``` 以上代码将在MATLAB中绘制一个包含多个圆柱体的图像。每个圆柱体由Cylinder函数生成,并通过plot3函数将其连接起来,在一个图中展示多个圆柱体。您可以根据需要调整参数和标签等视觉效果,以满足具体需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值