三维中通过一个点和距离与其欧拉角计算另一个点位置

在三维中计算一个点通过平移旋转的新点坐标

  在做三维交互的时候,我们也许会需要通过设定一些参数来计算一个三维点坐标到另一个点的变换过程;如,我们对点B(视锥体中心点)设置平移设置欧拉角:俯仰角(Pitch)、偏航角(Yaw)后,需要得到的点A的坐标位置,那么我们应该怎样来进行计算呢?

在这里插入图片描述

步骤分析

  这里我们是要通过F点设置角度与偏移来计算A点的坐标,那么上图中X的偏移量就应该为BI线段(x=BI),Y就应该为IK线段(Y=IK),Z则为AK线段(Z=AK);通过这些信息我们可以很明显的看出来,角KAB就是我们的俯仰角(Pitch),角KBI则是偏航角(Yaw),当前我们已知的信息有AB之间的距离,俯仰角及偏航角。

那么通过分析得出:
KB = SIN∠KAB * AB
z轴偏移量:Z = AK = COS∠KAB * AB
x轴偏移量:X = BI = SIN∠IKB * KB
y轴偏移量:Y = IK = COS∠IKB * KB

这样我们就知道了通过设置俯仰角(Pitch),偏航角(Yaw)和距离所偏移得到的点A的坐标了,那么下面就为大家把代码帖出来供大家取用。

代码实现

osg::Vec3f getNewPoint(osg::Vec3f pointB,double s_pitch,double s_heading, double s_dis)
{
	//这里原本向下为0度,此处减去90度是为了让俯仰角在平视时为0度
	float pitch = osg::DegreesToRadians(s_pitch - 90);
	//偏航角这里由于本人代码中需要进行反转所以将角度进行了反转
	float nAPYaw = (s_heading > 0) ? s_heading - 180 : s_heading + 180;
	float heading = osg::DegreesToRadians(nAPYaw);
	float len = s_dis * sinf(pitch);
	float delt_z = s_dis * cosf(pitch);
	float delt_x = len * sinf(heading);
	float delt_y = len * cosf(heading);
	osg::Vec3f spnt = pointB + osg::Vec3f(delt_x, delt_y, delt_z);
	return spnt;
}

到这里我们的点偏移计算讲解也就结束了,如果大家觉得我的方法还有用的话,也请大家能够点赞鼓励一下,您的鼓励是我分享的动力,谢谢各位!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值