3D网格(立方体)顶点位置计算算法咨询:求24个顶点的(x,y,z)坐标
如何生成指定划分的3D立方体网格顶点坐标?
嘿,这个问题其实很好解决,咱们一步步来拆解,保证你能快速生成所有24个顶点的坐标!
核心思路
首先得明确:3D网格的顶点其实就是三个轴上的坐标点的笛卡尔积——简单说就是X轴的每个点,和Y轴的每个点、Z轴的每个点都组合一遍,就能得到所有顶点。
1. 先确定立方体的边界范围
首先你需要定义你的立方体在3D空间中的位置,比如最简单的单位立方体(从(0,0,0)到(1,1,1)),当然你也可以换成任何你需要的范围(比如从(-1,-2,0)到(3,5,4)),这个完全灵活。
2. 计算每个轴的坐标间隔(步长)
因为你要在X轴取3个顶点、Y轴4个、Z轴2个,每个轴上的顶点是均匀分布的,所以步长计算公式是:步长 = (轴的最大值 - 轴的最小值) / (该轴的顶点数 - 1)
举个单位立方体的例子:
- X轴步长:
(1-0)/(3-1) = 0.5→ X轴坐标为0, 0.5, 1 - Y轴步长:
(1-0)/(4-1) ≈ 0.333→ Y轴坐标为0, 1/3, 2/3, 1 - Z轴步长:
(1-0)/(2-1) = 1→ Z轴坐标为0, 1
3. 三重循环生成所有顶点
把三个轴的坐标逐个组合,就能得到全部24个顶点。这里给你写一段Python代码示例,直接就能运行:
# 你的需求参数 x_vertex_count = 3 y_vertex_count = 4 z_vertex_count = 2 # 自定义立方体边界,这里用单位立方体,你可以随便改 cube_min = (0.0, 0.0, 0.0) cube_max = (1.0, 1.0, 1.0) # 计算各轴步长 step_x = (cube_max[0] - cube_min[0]) / (x_vertex_count - 1) if x_vertex_count > 1 else 0 step_y = (cube_max[1] - cube_min[1]) / (y_vertex_count - 1) if y_vertex_count > 1 else 0 step_z = (cube_max[2] - cube_min[2]) / (z_vertex_count - 1) if z_vertex_count > 1 else 0 # 生成所有顶点 vertices = [] for x_idx in range(x_vertex_count): x = cube_min[0] + x_idx * step_x for y_idx in range(y_vertex_count): y = cube_min[1] + y_idx * step_y for z_idx in range(z_vertex_count): z = cube_min[2] + z_idx * step_z vertices.append( (round(x, 3), round(y, 3), round(z, 3)) ) # 验证结果 print(f"生成的总顶点数:{len(vertices)}") for i, pos in enumerate(vertices, 1): print(f"顶点{i}: {pos}")
4. 特殊情况:想要整数坐标?
如果你希望所有顶点都是整数,只需要调整立方体的边界就行。比如:
- X轴从
0到2(刚好3个整数点:0,1,2) - Y轴从
0到3(4个整数点:0,1,2,3) - Z轴从
0到1(2个整数点:0,1)
这样生成的顶点就全是整数坐标,比如(0,0,0)、(0,0,1)、(0,1,0)...直到(2,3,1),刚好24个。
内容的提问来源于stack exchange,提问作者prubini87
相关产品推荐
相关产品推荐

