游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: FlyMagic

问个关于夹角的问题

[复制链接]

12

主题

217

帖子

220

积分

中级会员

Rank: 3Rank: 3

积分
220
发表于 2006-11-20 22:19:00 | 显示全部楼层

Re:问个关于夹角的问题

sin beta = (x1-x0)/((x1-x0)^2 + (y1-y0)^2)^0.5
cos beta = (y1-y0)/((y1-x0)^2 + (y1-y0)^2)^0.5
tan beta = (x1-x0)/(y1-y0)
            |y   /
            |   /
            | beta
_____|/_________ x
            |


20

主题

465

帖子

472

积分

中级会员

Rank: 3Rank: 3

积分
472
QQ
 楼主| 发表于 2006-11-20 23:41:00 | 显示全部楼层

Re:问个关于夹角的问题

我还是不是很清楚。
到底有什么办法可以求出它的弧度呢?
谁能写出
float GetRedian(POINT p0, POINT p1);
的代码?

20

主题

465

帖子

472

积分

中级会员

Rank: 3Rank: 3

积分
472
QQ
 楼主| 发表于 2006-11-20 23:52:00 | 显示全部楼层

Re:问个关于夹角的问题

我把正弦和正切搞错了。
float tan_value = (x1 - x0) / (y1 - y0);
float redian = atan(tan_value);

这样可以做出个样子来,但是问题是只能是180度以内的范围,而且是反的,实现不了360度,这是怎么回事呢?比如说处于135度的时候(第四象限),会变成第一象限的45度方向。所有第三、四象限的角度都会分别变垂直翻转成第二、一象限的角度。而第一象限和第二象限的角度互相水平翻转。也就是目标在左边,就朝向右边。

0

主题

202

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2006-11-21 00:07:00 | 显示全部楼层

Re:问个关于夹角的问题

用向量

12

主题

217

帖子

220

积分

中级会员

Rank: 3Rank: 3

积分
220
发表于 2006-11-21 00:18:00 | 显示全部楼层

Re:问个关于夹角的问题

意思就是Y坐?朔戳耍 ???是光?呕????,可能你的右上坐?讼蹈?uffer的右下坐?讼?]有?理好。

20

主题

465

帖子

472

积分

中级会员

Rank: 3Rank: 3

积分
472
QQ
 楼主| 发表于 2006-11-21 00:46:00 | 显示全部楼层

Re:问个关于夹角的问题

解决了。反正切函数本来就不可能表示出绝对值大于1的弧度,所以需要自己手动判定。下面就是完全的解决方法。
float x = g_attack.target->m_x - g_attack.unit->m_x;
float y = g_attack.target->m_y - g_attack.unit->m_y;
float tan_value = x / y;
float redian = -atan(tan_value);
if (y >= 0.00f) redian += 3.14159f;

取反正切函数的负值,就可以得到正好相反的角度,这样的话就可以朝向北方的旋转角度。但是这只对第一、二象限有效,在第三、四象限的时候会反转180度(也就是三象限转到一象限,四象限转到二象限),所以,加上一个180度(PI弧度),就正好得到需要的值。
所以,当处于3、4象限(目标Y值大于出发点Y值),包括平行于X轴(两点Y值一样)的时候,加上3.14159f就得到正确的弧度了。

谢谢大家的帮忙,问题已经解决。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 22:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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