You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于(xmin,xmax)等坐标绘制长方体的全部3D棱边?

如何绘制长方体的全部棱边(基于坐标范围)

要绘制给定坐标范围(xmin,xmax)、(ymin,ymax)、(zmin,zmax)的长方体棱边,核心逻辑是:先生成长方体的8个顶点,再定义12条棱对应的顶点对,最后逐个绘制这些线段。以下是几种常用工具的实现方案:

使用Python的Matplotlib实现

Matplotlib是科学绘图的常用工具,通过3D轴可以轻松绘制线段:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 替换为你的长方体坐标范围
xmin, xmax = 0, 2
ymin, ymax = 1, 3
zmin, zmax = 0, 4

# 生成长方体的8个顶点
vertices = [
    (xmin, ymin, zmin), (xmax, ymin, zmin),
    (xmax, ymax, zmin), (xmin, ymax, zmin),
    (xmin, ymin, zmax), (xmax, ymin, zmax),
    (xmax, ymax, zmax), (xmin, ymax, zmax)
]

# 定义12条棱的顶点索引对(底面4条、顶面4条、侧面竖棱4条)
edges = [
    (0,1), (1,2), (2,3), (3,0),
    (4,5), (5,6), (6,7), (7,4),
    (0,4), (1,5), (2,6), (3,7)
]

# 创建3D绘图环境
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 遍历绘制每条棱
for start, end in edges:
    xs = [vertices[start][0], vertices[end][0]]
    ys = [vertices[start][1], vertices[end][1]]
    zs = [vertices[start][2], vertices[end][2]]
    ax.plot(xs, ys, zs, color='#333333')

# 设置坐标轴标签与范围
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_xlim(xmin-0.5, xmax+0.5)
ax.set_ylim(ymin-0.5, ymax+0.5)
ax.set_zlim(zmin-0.5, zmax+0.5)

plt.show()

使用Python的Open3D实现

如果需要更专业的3D可视化,Open3D提供了现成的长方体生成工具,只需开启线框模式即可:

import open3d as o3d

# 替换为你的坐标范围
xmin, xmax = 0, 2
ymin, ymax = 1, 3
zmin, zmax = 0, 4

# 计算长方体的中心坐标与长宽高
center = ((xmin+xmax)/2, (ymin+ymax)/2, (zmin+zmax)/2)
size = (xmax-xmin, ymax-ymin, zmax-zmin)

# 创建长方体网格并移动到目标位置
box_mesh = o3d.geometry.TriangleMesh.create_box(
    width=size[0], height=size[1], depth=size[2]
)
box_mesh.translate(center)
box_mesh.paint_uniform_color([0, 0, 0])  # 设置棱边颜色为黑色

# 配置可视化窗口,开启线框模式
vis = o3d.visualization.Visualizer()
vis.create_window(window_name='Cube Edges')
render_opt = vis.get_render_option()
render_opt.mesh_show_wireframe = True
render_opt.mesh_color_option = o3d.visualization.MeshColorOption.Color

vis.add_geometry(box_mesh)
vis.run()
vis.destroy_window()

使用C++ OpenGL实现

如果需要底层图形编程实现,OpenGL通过GL_LINES模式直接绘制线段:

#include <GL/glut.h>

// 替换为你的长方体坐标范围
const float xmin = 0, xmax = 2;
const float ymin = 1, ymax = 3;
const float zmin = 0, zmax = 4;

void drawCubeEdges() {
    glBegin(GL_LINES);
    // 绘制底面四条棱
    glVertex3f(xmin, ymin, zmin); glVertex3f(xmax, ymin, zmin);
    glVertex3f(xmax, ymin, zmin); glVertex3f(xmax, ymax, zmin);
    glVertex3f(xmax, ymax, zmin); glVertex3f(xmin, ymax, zmin);
    glVertex3f(xmin, ymax, zmin); glVertex3f(xmin, ymin, zmin);
    // 绘制顶面四条棱
    glVertex3f(xmin, ymin, zmax); glVertex3f(xmax, ymin, zmax);
    glVertex3f(xmax, ymin, zmax); glVertex3f(xmax, ymax, zmax);
    glVertex3f(xmax, ymax, zmax); glVertex3f(xmin, ymax, zmax);
    glVertex3f(xmin, ymax, zmax); glVertex3f(xmin, ymin, zmax);
    // 绘制侧面竖棱
    glVertex3f(xmin, ymin, zmin); glVertex3f(xmin, ymin, zmax);
    glVertex3f(xmax, ymin, zmin); glVertex3f(xmax, ymin, zmax);
    glVertex3f(xmax, ymax, zmin); glVertex3f(xmax, ymax, zmax);
    glVertex3f(xmin, ymax, zmin); glVertex3f(xmin, ymax, zmax);
    glEnd();
}

void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0f, 0.0f, -10.0f);  // 调整视角距离
    glRotatef(30.0f, 1.0f, 1.0f, 0.0f);  // 旋转视角便于观察
    drawCubeEdges();
    glutSwapBuffers();
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(600, 600);
    glutCreateWindow("Cube Edges");
    glEnable(GL_DEPTH_TEST);
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

内容的提问来源于stack exchange,提问作者10may

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:24:29