正如标题所暗示的,如何创建几何形状的3D坐标的numpy数组?
目前,我已经想出了最简单的形状:
latva = 6
latvb = 6
latvc = 6
latdiv = 20
latvadiv = latva / latdiv
latvbdiv = latvb / latdiv
latvcdiv = latvc / latdiv
lol = np.zeros((latdiv**3,4),dtype=np.float64)
lol[:,:3] = (np.arange(latdiv**3)[:,None]//(latdiv**2,latdiv,1)*(latvadiv,latvbdiv,latvcdiv)%(latva,latvb,latvc))创建一个(8000,4)数组。如果你沿着1,2,3列拆分数组(忽略第4列,因为它在这个问题中没有意义)并绘制它(我个人使用pyplot),你就得到了一个Cube!
很简单。也适用于矩形。
但我一点也不知道如何走得更远--比方说画一个菱形。
我对黑魔法不感兴趣,比如球体、椭圆形或边不随线变化的形状。就像你的标准rhombus/Rhomboid/Parallelepiped/Whatever_you_want_to_call_it.
对于如何实现这一点有什么想法吗?
发布于 2016-06-18 14:51:09
因为您已经有了在正方形或立方体中生成点的便捷方法,所以制作菱形、2D情况下的平行四边形和3D情况下的平行四边形的最简单方法是应用仿射变换来计算新的点坐标。
例如,要制作菱形,可以通过(-centerX,-centerY)平移、Pi/4旋转、沿轴缩放(如果需要)和平移到所需位置的组合来查找矩阵。
AffMatrix = ShiftMatrix * RotateMatrix * ScaleMatrix * BackShiftMatrix
for each point coordinates:
(NewX, NewY) = (AffMatrix) * (X, Y)菱形也将包括剪切变换。
我认为numpy有现成的例程来创建和组合(相乘)仿射矩阵。
https://stackoverflow.com/questions/37892357
复制相似问题