Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将二维视口平移转换为三维旋转_C#_Wpf_Math_3d_Geometry - Fatal编程技术网

C# 将二维视口平移转换为三维旋转

C# 将二维视口平移转换为三维旋转,c#,wpf,math,3d,geometry,C#,Wpf,Math,3d,Geometry,我正在尝试参照2D视口旋转3D圆柱体。已知圆柱体的半径和二维平移,如何计算其旋转角度 假设圆柱体从A旋转到B。此外,假设A是逆时针方向的θ度,B是水平方向的θ度。因此,A和B之间的角度是2θ A的y坐标由r*sin(θ)给出,B的y坐标只是-r*sin(θ) 因此,2*r*sin(θ)=D(平移距离) 求解θ: θ = asin(D/(2*r)) (其中asin是圆弧正弦函数) 另一种(可能更稳健的)方法是计算三角形的垂线和底面,然后进行atan2(perp,base) 垂直线是简单的D/2,

我正在尝试参照2D视口旋转3D圆柱体。已知圆柱体的半径和二维平移,如何计算其旋转角度


假设圆柱体从A旋转到B。此外,假设A是逆时针方向的
θ
度,B是水平方向的
θ
度。因此,A和B之间的角度是

A的y坐标由
r*sin(θ)
给出,B的y坐标只是
-r*sin(θ)

因此,
2*r*sin(θ)=D
(平移距离)

求解
θ

θ = asin(D/(2*r))
(其中asin是圆弧正弦函数)

另一种(可能更稳健的)方法是计算三角形的垂线和底面,然后进行atan2(perp,base)


垂直线是简单的
D/2
,而底部是
sqrt(R*R-D*D/4)

了解更多关于你的情况以及你想要实现的具体目标会很有帮助。不清楚你希望如何将旋转和翻译联系起来。@KendallFrey我用插图编辑了我的文章,希望你理解我的意思。谢谢如果您试图为2D-3D映射找到合适的搜索词,通常的搜索词是“unproject”,它将2D构造(通常是点射线)反向移动到3D射线中。您使用的公式不取决于您使用的类型吗?绝对!“说得好,”斯科特汉姆伯伦说。我假设这是一个像这样的“轮子”小部件:@RahulBanerjee谢谢!你的公式似乎对我的案子很有效。我实际上是在用touch做一个3D旋转木马。用触摸操作和惯性实现它。很高兴我(几乎)猜对了!感谢您的反馈:)