gpt4 book ai didi

java - 我应该如何创建一个函数以便在处理 3 中生成规则的 3D 金字塔?

转载 作者:行者123 更新时间:2023-11-30 01:50:41 27 4
gpt4 key购买 nike

我刚刚开始处理。因此,我想创建一个函数,允许任何用户输入边数来创建 3D 金字塔。我正在使用处理 3。我需要一些帮助。提前致谢。我编写了一段目前有效的代码,但我想概括它。任何建议/提示将不胜感激。提前谢谢各位。

  size(640, 360, P3D);
background(0);
translate(width/2, height/2, 0);
stroke(255);
rotateX(PI/2);
rotateZ(-PI/6);
noFill();
beginShape();
vertex(-100, -100, -100);
vertex( 100, -100, -100);
vertex( 0, 0, 100);
vertex( 100, -100, -100);
vertex( 100, 100, -100);
vertex( 0, 0, 100);
vertex( 100, 100, -100);
vertex(-100, 100, -100);
vertex( 0, 0, 100);

vertex(-100, 100, -100);
vertex(-100, -100, -100);
vertex( 0, 0, 100);
endShape();

最佳答案

创建一个可以绘制金字塔的函数,参数为金字塔的边数和大小。例如,尺寸参数可以是底面的直径 (d) 和金字塔的高度 (h):

void drawPyramid(int sides, float d, float h) {

// [...]
}

首先计算金字塔的基点并将其存储到PVector的数组中。积分可以通过 sin() 计算和 cos() ,围绕一个完整的圆圈分布 (TWO_PI):

PVector[] basePts = new PVector[sides];
for (int i = 0; i < sides; ++i ) {
float ang = TWO_PI * i / sides;
basePts[i] = new PVector(cos(ang) * d/2, sin(ang) * d/2, -h/2);
}

通过基本三角形绘制金字塔的边(参见 beginShape() ):

beginShape(TRIANGLES);
for (int i = 0; i < sides; ++i ) {
int i2 = (i+1) % sides;
vertex(basePts[i].x, basePts[i].y, basePts[i].z);
vertex(basePts[i2].x, basePts[i2].y, basePts[i2].z);
vertex(0, 0, h/2);
}
endShape();

并用闭合形状绘制金字塔的底部:

beginShape();
for (int i = 0; i < sides; ++i ) {
vertex(basePts[i].x, basePts[i].y, basePts[i].z);
}
endShape(CLOSE);

请参阅以下示例,该示例使用该函数绘制具有不同边数的金字塔:

void setup() {
size(640, 500, P3D);
frameRate(4);
}

int no_side = 3;
void draw() {
background(0);
translate(width/2, height/2, 0);
stroke(255);
rotateX(PI/2);
rotateZ(-PI/6);
noFill();

drawPyramid(no_side, 200.0, 200.0);
no_side = no_side < 20 ? no_side+1 : 3;
}

void drawPyramid(int sides, float d, float h) {

PVector[] basePts = new PVector[sides];
for (int i = 0; i < sides; ++i ) {
float ang = TWO_PI * i / sides;
basePts[i] = new PVector(cos(ang) * d/2, sin(ang) * d/2, -h/2);
}

beginShape(TRIANGLES);
for (int i = 0; i < sides; ++i ) {
int i2 = (i+1) % sides;
vertex(basePts[i].x, basePts[i].y, basePts[i].z);
vertex(basePts[i2].x, basePts[i2].y, basePts[i2].z);
vertex(0, 0, h/2);
}
endShape();

beginShape();
for (int i = 0; i < sides; ++i ) {
vertex(basePts[i].x, basePts[i].y, basePts[i].z);
}
endShape(CLOSE);
}

关于java - 我应该如何创建一个函数以便在处理 3 中生成规则的 3D 金字塔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56174776/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com