加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 计算从高度不同的(0,0)以外的位置点击坐标(x,y)所需的角度

发布时间:2020-12-15 05:40:55 所属栏目:百科 来源:网络整理
导读:我试图计算发射射弹以达到特定坐标所需的角度. 我的射弹位于一个随机坐标,我的目标坐标位于静态坐标. 我最终在维基百科上运行以下等式来计算从(0,0)到(x,y)的坐标所需的角度: 我已经尝试了解这个和其他公式,并尝试了以下实现(我使用的是c#和XNA). double y
我试图计算发射射弹以达到特定坐标所需的角度.

我的射弹位于一个随机坐标,我的目标坐标位于静态坐标.

我最终在维基百科上运行以下等式来计算从(0,0)到(x,y)的坐标所需的角度:

我已经尝试了解这个和其他公式,并尝试了以下实现(我使用的是c#和XNA).

double y = source.Y - target.Y;
double x = Vector2.Distance(source,target);
double v = 1440; //velocity
double g = 25; //gravity
double sqrt = (v*v*v*v) - (g*(g*(x*x) + 2*y*(v*v)));
sqrt = Math.Sqrt(sqrt);
double angleInRadians = Math.Atan(((v*v) + sqrt)/(g*x));

我还尝试了以下内容,这导致了相同的角度,其中v和g的值保持不变.

double targetX = target.X - source.X;
double targetY = -(target.Y - source.Y);
double r1 = Math.Sqrt((v*v*v*v) - g*(g*(target.X*target.X) + ((2*target.Y)*(v*v))));
double a1 = ((v*v) + r1)/(g*target.X);
angleInRadians = -Math.Atan(a1);
if (targetX < 0)
{
    angleInRadians -= 180/180*Math.PI;
}

我的猜想是,即使在我(假设)尝试将源坐标归零,我仍然没有正确地对非(0,0)源和不同高程的坐标进行计算.

下面是描绘我的坐标系的图像.这是XNA的默认设置.

解决方法

由于评论中的帮助,找到这个角度的解决方案最终要求将位置转换为基于(0,0)的系统.对于寻找相同场景的人来说,最终的工作解决方案是:
double x = -(source.x - target.x);
double y = (source.y - target.y);
double v = 1440; //m/s
double g = 25; //m/s
double sqrt = (v*v*v*v) - (g*(g*(x*x) + 2*y*(v*v)));
sqrt = Math.Sqrt(sqrt);
angleInRadians = Math.Atan(((v*v) + sqrt)/(g*x));

然后将弧度转换为与XNA一起使用的向量,执行以下转换:

Vector2 angleVector = new Vector2(-(float)Math.Cos(angleInRadians),(float)Math.Sin(angleInRadians));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读