Wolfram mathematica 图形的2d投影3D对象

Wolfram mathematica 图形的2d投影3D对象,wolfram-mathematica,Wolfram Mathematica,我有一个图形3D对象。我想将其导出为位图,并计算某些3D点的位图像素坐标 Mathematica在绘制3D图形时,显然会将3D对象投影到2D像素坐标。我怎样才能知道这个投影是什么 我宁愿避免基于ViewVector、ViewAngle、ImageSize和BoundingBox进行大量复杂的几何计算。有捷径吗 Damon。渲染Graphics3D对象时,可以指定该选项。可以设置变换(例如旋转),然后设置投影 通过这种方式,您可以使用投影的明确知识来计算正确的平面坐标。您可以使用选项“变换”->“

我有一个图形3D对象。我想将其导出为位图,并计算某些3D点的位图像素坐标

Mathematica在绘制3D图形时,显然会将3D对象投影到2D像素坐标。我怎样才能知道这个投影是什么

我宁愿避免基于ViewVector、ViewAngle、ImageSize和BoundingBox进行大量复杂的几何计算。有捷径吗


Damon。

渲染Graphics3D对象时,可以指定该选项。可以设置变换(例如旋转),然后设置投影


通过这种方式,您可以使用投影的明确知识来计算正确的平面坐标。

您可以使用选项
“变换”->“透视”
进行
几何变换。假设你的棋盘看起来像这样

img = Image@
  Plot3D[0, {x, -1, 1}, {y, -1, 1}, Mesh -> 7, 
   MeshShading -> {{Black, White}, {White, Black}}, Boxed -> False, 
   AxesEdge -> {{-1, -1}, {-1, -1}, None}, AxesOrigin -> {-1, -1, 0}]

要找到投影,您将需要
img
中至少4个控制点的坐标,您知道这些点的{x,y}-坐标。可能有一些方法可以让Mathematica自动找到这些坐标,但您可以通过右键单击
img
并选择“获取坐标”来手动选择它们。单击您选择的控制点(在本例中,我选择了棋盘的4个角),然后 将其坐标复制/粘贴到新行。你应该得到像这样的东西

controls = {{13.5`, 151.5`}, {235.5`, 68.5`}, 
   {332.5`, 206.5`}, {139.5`, 262.5`}};
ImageCompose[img, Image[BoxMatrix[2]], Round[transform[{4 - 1/2, 6 - 1/2}]]]
然后,投影函数和矩阵成为

transform = FindGeometricTransform[controls,
   {{0, 0}, {8, 0}, {8, 8}, {0, 8}}, 
   "Transformation" -> "Perspective"][[2]]
transfMat = TranformationMatrix[transform]
请注意,我选择的棋盘是以{4,4}为中心的8x8正方形,但您可以选择任何正方形

棋盘上的点{x,y}现在将与
img
中的点对应,像素坐标
transform[{x,y}]
或使用投影矩阵
(transfMat[{1,2}].{x,y,1})/(transfMat[[3].{x,y,1})
。例如,要在D6上放置一个标记,它将位于我的8x8正方形中的位置{x,y}={4-1/2,6-1/2},您可以执行以下操作

controls = {{13.5`, 151.5`}, {235.5`, 68.5`}, 
   {332.5`, 206.5`}, {139.5`, 262.5`}};
ImageCompose[img, Image[BoxMatrix[2]], Round[transform[{4 - 1/2, 6 - 1/2}]]]

只是好奇而已。。。为什么不让Mma帮你做呢?这是一个html动画。我会将游戏板创建为Mathematica Graphics3D对象,导出为位图,将位图加载到html文档中,然后用Javascript在游戏板上移动一个游戏块。我不确定我是否理解,但这听起来好像你只是想将图形导出为某种位图格式,如PNG。为什么不在三维图形上单击鼠标右键,然后选择“将图形另存为…”?或者做一个
导出[“out.png”,myGraphics]
?让我具体一点。假设我在Mathematica中生成一个3D棋盘,并导出为png。在HTML/Javascript中,我想显示一个棋子在棋盘上移动。我可能想在一个正方形或另一个正方形上展示这件作品。Javascript如何知道游戏的位置?我不太熟悉3D几何。如果我有一个Mathematica图形,例如我用鼠标旋转的图形,我如何计算它的ViewMatrix?绝对选项对我没有帮助。你可以通过在原始图形的每个角落放置一个红色像素,然后在imgThanks中再次找到它们来自动查找控制点,这就是我想知道的。我以前从未遇到过芬奇计量转换。