Python 在 3D 绘图中绘制垂直于轴的平面

问题描述 投票:0回答:1

我无法使用 python 绘制平面 x=y。

我的代码在给定平面向量和其中包含的某个点的情况下生成平面上的点。我所做的是生成两个跨越平面的正交向量,以及平面中的三个点并设置其边界。然后我添加向量的线性组合以生成这些边界内的点。

作为例子,我以平面 x=y:

import numpy as np
import plotly.graph_objects as go

p0 = np.array([0,0,0])
p1 = np.array([0,0,1])
p2 = np.array([1,1,0])

v1 = np.array([0,0,1])
v2 = np.array([1,1,0])/np.sqrt(2)

n1, n2 = v1.dot(p1-p0), v2.dot(p2-p0)
a1, a2 = np.mgrid[0:n1:10*1j,0:n2:10*1j]
a1 = a1.flatten()[np.newaxis,:]
a2 = a2.flatten()[np.newaxis,:]
pts = p0[:,np.newaxis] + a1*v1[:,np.newaxis] + a2*v2[:,np.newaxis]

go.Figure(data=[go.Mesh3d(
    x=pts[0],
    y=pts[1],
    z=pts[2]
)])

这会生成我想要的数据点,但不会绘制Mesh3d,我猜这是因为由于排序而未能成功构造网格中的三角形。也许设置 i,j,k 可能会解决问题,但我不知道如何解决这个问题,更不用说对于任意法线向量了。 Mesh3d 的替代品非常受欢迎,尽管我确实需要使用plotly。所以我的问题是如何在Python中使用plotly可靠地构造平面?特别是当它们垂直于某些轴时。

python plotly plotly-python normals plane
1个回答
0
投票

有一个问题,Mesh3d 不会为某些向量绘制三角形,但我发现如果您指定想要图形算法绘制的 2D 三角形,那么您可以让它们显示出来。要指定 2D 三角形,您必须使用参数

i
j
k
。在文档中确实指出“最好提供 i、j、k”。

无论如何,这是一个包含三个向量的简单示例,其中 x=y。

import numpy as np
import plotly.graph_objects as go

fig = go.Figure(data=[go.Mesh3d(
    x=[0, 0, 1, 1], 
    y=[0, 0, 1, 1], 
    z=[0, 1, 0, 1],
    i=[0],
    j=[1],
    k=[2]
)])
fig.show()

i
j
k
在这里所做的是指定应绘制图形的第一个三角形的向量。如果您向其中每个元素添加第二个元素,您将指定应绘制的第二个三角形等等。

这就是演示:

fig = go.Figure(data=[go.Mesh3d(
    x=[0, 0, 1, 1], 
    y=[0, 0, 1, 1], 
    z=[0, 1, 0, 1],
    i=[0, 1],
    j=[1, 3],
    k=[2, 2]
)])
fig.show()

© www.soinside.com 2019 - 2024. All rights reserved.