设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4230|回复: 18
打印 上一主题 下一主题

[已经解决] 求一个计算角度的算式。

[复制链接]

Lv5.捕梦者

梦石
0
星屑
31888
在线时间
5080 小时
注册时间
2012-11-19
帖子
4877

开拓者

跳转到指定楼层
1
发表于 2018-4-5 20:18:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 芯☆淡茹水 于 2018-4-5 20:44 编辑

    咳~,本人的数学是体育老师教的.....,以前学的各X函数已经忘得差不多了。

最近想实现一个功能,遇到一个难题:

如下图:
已知两点 A 和 B ,以及其坐标 A(x1,y1) , B(X2,Y2)  ,以正上方(12点方向)为 0 度,顺时针,求图中 ? 号的角度。
也就是 A 面向 B 时,以12点方向为基准, A 的角度。 当然 B 也可能在 360 度的任意位置。




例如比较简单的: x2 > x1 and y2 == y1  , 那么此时是 90 度。
xp vx va mv  va mz 各类型脚本/插件定制

Lv3.寻梦者

梦石
0
星屑
3039
在线时间
1052 小时
注册时间
2011-8-16
帖子
242
来自 4楼
发表于 2018-4-5 21:11:48 | 只看该作者
本帖最后由 失落的乐章 于 2018-4-5 22:30 编辑

直角三角形的第三点为 C(x1, y2)
AC = |y1 - y2|
BC = |x1 - x2|
∠BAC = arctan(BC / AC)

B 在 A 的右下方时,所求的角 = 180° - ∠BAC;
B 在 A 的右上方时,所求的角 = ∠BAC;
B 在 A 的左上方时,所求的角 = 360° - ∠BAC;
B 在 A 的左下方时,所求的角 = 180° + ∠BAC.
(数学水平不行,应该有更简便的方法。借回答这个问题的机会回忆了一下多年前学的数学知识,只能想起这么多了……)

评分

参与人数 2星屑 +70 +1 收起 理由
RyanBern + 70 学好数学很重要
芯☆淡茹水 + 1 数学水平反正比我好

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
2
发表于 2018-4-5 20:34:53 | 只看该作者
图中?号的角度不是120度吗?
好像是三角函数得知的。
其实我是在胡扯的。

点评

B可以在A周围360度的任意地点,或近或远,图只是一个点的示例而已。所以只有四个参数,A和B的坐标。  发表于 2018-4-5 20:40

评分

参与人数 1+1 收起 理由
芯☆淡茹水 + 1 塞糖

查看全部评分

一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37759
在线时间
5388 小时
注册时间
2006-11-10
帖子
6545
3
发表于 2018-4-5 21:06:22 | 只看该作者
本帖最后由 灯笼菜刀王 于 2018-4-5 21:11 编辑

咱的数学也基本忘光了(←那你进来干嘛?)

不过俗话说的好,学习差的学生都会耍点小手段=3=

咱提供下想法,看看能不能有帮助

因为不管B怎么移动,只要是二次元,它一定会处于直角坐标系里, 把A点当原点,先用两点的XY判断B的位置,这样把360度的范围缩小到45度, X相当就是360度或者180度,Y相等就是90度或者270度,(X1-X2).abs == (Y1-Y2).abs 就是45度,135度, 225度,315度

然后,用A的X和B的Y当做0,(或者相反) ,这样就画出一个直角三角形了, 也能得到 两个直角边的具体数值, 即另外的那个非0的坐标

已知直角三角形的两个直角边, 求另外两个角的角度(怎么搞忘记了,tan的用法),  

再根据前面B在A直角坐标系里的位置,加上相应的整数角度就OK了不是么?

评分

参与人数 1+1 收起 理由
芯☆淡茹水 + 1 感谢回答,有点长

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
4013
在线时间
435 小时
注册时间
2018-4-1
帖子
103
5
发表于 2018-4-5 21:13:20 | 只看该作者
?=arctan(x2-x1/y2-y1)  【 y2=y1 时?=90 】
大概是这样吧。。。
但是不懂程序

评分

参与人数 1+1 收起 理由
芯☆淡茹水 + 1 除 0 了呢

查看全部评分

梦想世界,在我手中。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

6
发表于 2018-4-5 21:49:49 | 只看该作者
敲黑板,求角度要用 Math.atan2(y, x) 返回值是 -PI ~ +PI
  1. x, y = x1-x2, y1 - y2
  2. t = 1.5 * Math::PI - Math.atan2(y, x)
复制代码

点评

本来是准备算b点与水平方向的角,这个角a点处要求的角加起来是1.5pi  发表于 2018-4-6 10:57
怎么是1.5……应该是0.5  发表于 2018-4-6 10:52
这个 t 直接是角度? 0 ~ 360 ? 怎么感觉不对呢  发表于 2018-4-6 08:01

评分

参与人数 2+2 收起 理由
芯☆淡茹水 + 1 这个得先试试
失落的乐章 + 1 我很赞同

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9275
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

7
发表于 2018-4-5 22:14:49 | 只看该作者
知道3个点和坐标系就能算了吧···
把点连起来得到两点间距离,然后就是楼上的方法了···

评分

参与人数 1+1 收起 理由
芯☆淡茹水 + 1 2点足够了,还想3点!

查看全部评分

[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22431
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

8
发表于 2018-4-6 10:51:17 | 只看该作者
你的坐标系和RM的坐标系是不一样的,和平面直角坐标系就更不一样。
Math.atan2(y,x)返回的结果是基于平面直角坐标系的。而且值域是(-pi, pi]

如果你的(x1, y1), (x2,y2)是以RM的坐标系(左上角)为(0,0)的话
Math.atan2(y2-y1, x2-x1)得到的值是1/2pi-你那个角度的结果,因此

rad_angle = Math::PI / 2 - Math.atan2(y2 - y1, x2 - x1)
grd_angle = rad_angle / Math::PI * 180
grd_angle += 360 if grd_angle < 0
以上

评分

参与人数 1+1 收起 理由
芯☆淡茹水 + 1 精品文章

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
31888
在线时间
5080 小时
注册时间
2012-11-19
帖子
4877

开拓者

9
 楼主| 发表于 2018-4-6 13:01:28 | 只看该作者
本帖最后由 芯☆淡茹水 于 2018-4-6 13:22 编辑
SailCat 发表于 2018-4-6 10:51
你的坐标系和RM的坐标系是不一样的,和平面直角坐标系就更不一样。
Math.atan2(y,x)返回的结果是基于平面直 ...



     唔~,这种方法试验是最接近的,弄了个简单的测试。

把发射的导弹作为 A 点,目标作为 B 点。
导弹图片是这样的,初始正上方, 0 度。


然后加入“发射”,  发射时初始 270或90 度 ±45 度,有一段不“指向”目标的时间(直接保持方向飞),过后随时根据角度算式“指向”目标。
目标为 对面飞船 的中心坐标。根据导弹自身方向的X,Y移动量已经写好,然后加入角度算式:


结果测试是酱紫:
到了快接近目标时,有些像是在画圆。



电脑开录屏就有些卡。

如果初始就指向目标中心, 运动轨迹是这样:
感觉好像什么东西刚好反了。



点评

这个图让我想到贴吧那张用枪射出的子弹轨迹描述各种游戏的图了···  发表于 2018-4-6 13:25
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2744
在线时间
2630 小时
注册时间
2013-1-16
帖子
5657

贵宾

10
发表于 2018-4-6 15:44:15 | 只看该作者
如果只求[0, π]之间的夹角,直接向量点乘就好了;

如果求的是[0, 2π]之间的夹角,就需要用到向量叉乘了,比如这篇:https://blog.csdn.net/hy3316597/article/details/52732963

另外这是啥引擎?Cocos Creator?

点评

以前学的各函数快忘光了,专业术语看着头大,理解起来很费劲。  发表于 2018-4-6 16:24
-.-! MV...  发表于 2018-4-6 15:58

评分

参与人数 1+1 收起 理由
芯☆淡茹水 + 1 塞糖

查看全部评分

(Created by @喵kano)


施工现场:hotege.github.io
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-20 22:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表