我一直在做一个个人项目,制作方程x^2+y^2+z^2=S的整数解的图像,其中“S”是任意整数
换句话说,我在寻找所有的三维点[x,y,z],其中x,y,z都是完美的平方整数,x+y+z=S
例如,S=2809将具有以下解决方案:
在我回答我的问题之前,这里有一个关于某些上下文的小切线:
一般方程x+y+z=S的所有解将位于由以下公式定义的二维平面上:
这是一张x+y+z=50的所有解(不仅仅是方点)的图表,以说明该方程的所有解将位于上述ABC定义的同一平面上。请注意,下面三角形的尖端是:[50,0,0]、[0,50,0]和[0,0,50]
回到我的问题: 在找到正方形的解算点之后,我想根据ABC平面将3D解算点转换为2D坐标,A为(0,0),B为最大“x”值,C为最大“y”值。然后我希望将这些解决方案输出到一个图像文件中
我的线性代数知识很贫乏,我一直无法找到一种基于3个非共线点将三维坐标转换为二维平面坐标的方法
我的代码目前是用python编写的,但算法/数学答案也一样好
非常感谢您的帮助
在我看来,你已经可以找到你的
(x, y, z)
点了,你的问题是如何把它们投射到一个平面上请参考projection matrix了解如何将3d世界投影到您选择的图像平面上
具体地说,您必须将
(x, y, z)
坐标表示为homogeneous coordinates,方法是将它们称为(x, y, z, 1)
,并将它们乘以与需要投射它们的平面正交的相关摄影机矩阵这将产生形式为
(x', y', f)
的二维齐次坐标,从中可以通过(x_projected, y_projected) = (x'/f, y'/f)
获得投影坐标OpenCV是你的朋友
重述:
n
(x, y, z)
点(4, 3)
的投影(相机)矩阵M
,或者使用任何工具计算自己李>1
添加到所有点,以将它们作为三维齐次坐标:n
点(x, y, z, 1)
M * (x, y, z, 1)^T
=(x', y', f)
(x, y)
=(x'/f, y'/f)
获取n
实际二维投影坐标(相对于M
矩阵定义的摄影机中心)好处:您可以将所有的
(x, y, z, 1)
点作为列堆叠到(4, n)
矩阵P
中,整个乘法过程将是R = M * P
,一个R
形状的结果矩阵(3, n)
,其列是生成的齐次坐标我认为Gulzar的答案是正确的,但更多的是围绕渲染(即摄影机和同质坐标)进行的。然而,我确实想出了如何做我想做的事
开始绘制三维坐标图:
ABC平面上的“投影”坐标:
相关问题 更多 >
编程相关推荐