Processing 012 怎么绘制一个球体

Processing 012 怎么绘制一个球体

斐波那契网格

在 processing 中有自带的绘制球体的工具,但是不能控制每一个点,如何在一个球面尽量均匀分布 N 个点是一个笔记哦啊复杂的问题。一般计算都比较复杂,但是斐波那契网格似乎是一个很完美的解。以下是一个半径为1的球

z[n] = (2n - 1) / N - 1
x[n] = sqrt(1 - square(z[n])) * cos(2n*pi*φ)
y[n] = sqrt(1 - square(z[n])) * sin(2n*pi*φ)

其中 N 是点总个数, φ 是黄金分割比

代码

int N = 1000;
float phi = 0.618;
float r = 200;

void setup(){
  size(680, 480, P3D);
  strokeWeight(3);
  stroke(255);
}

float p = 0;
float q = 0;
void draw(){
  background(0);
  translate(width/2, height/2);
 
  rotateY(p);
  rotateX(q);
  p+=0.00005 * (mouseX - width/2);
  q+=0.00005 * (mouseY - height/2);
  
  for(int i = 1; i <= N;i++){
      float z = (2.0 * i - 1) / N - 1;
      float x = sqrt(1-sq(z)) * cos(2 * PI * i * phi);
      float y = sqrt(1-sq(z)) * sin(2 * PI * i * phi);
      point(r * x, r * y, r * z);
  }
}

绘制效果

在这里插入图片描述

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值