找回密码
 点一下
查看: 1995|回复: 18

如何通过坐标计算技能点的方向。

[复制链接]
发表于 2011-4-2 19:41:26 | 显示全部楼层 |阅读模式
想要让单位施放 震荡波 然后让一个单位向目标施放点的方向冲。。。。
但是。。。不知道该如何求这个方向。。。。。用坐标计算。。。。
发表于 2011-4-2 20:11:41 | 显示全部楼层
用到反三角函数么?那个有取值区间限制啊……貌似不行,但YDWE里有“数学-两点间方向”可以直接用的……原版WE应该也有吧……
回复

使用道具 举报

发表于 2011-4-2 20:30:28 | 显示全部楼层
Cos
Sin
回复

使用道具 举报

发表于 2011-4-2 21:13:26 | 显示全部楼层
实数-角度-两点方向
回复

使用道具 举报

 楼主| 发表于 2011-4-2 23:37:45 | 显示全部楼层
主要是不想用点啊....
看来不用点是不太行了啊....
回复

使用道具 举报

发表于 2011-4-3 00:27:49 | 显示全部楼层
[jass]native Atan2    takes real y, real x returns real[/jass]
[jass]
angle=Atan2(y2-y1,x2-x1)/3.14159*180
angle=Atan2(GetUnitY(u2)-GetUnitY(u1),GetUnitX(u2)-GetUnitX(u1))/3.14159*180
[/jass]
回复

使用道具 举报

 楼主| 发表于 2011-4-3 04:00:28 | 显示全部楼层
引用第5楼cuathc于2011-04-03 00:27发表的 :
[jass]native Atan2    takes real y, real x returns real[/jass]
[jass]
angle=Atan2(y2-y1,x2-x1)/3.14159*180
angle=Atan2(GetUnitY(u2)-GetUnitY(u1),GetUnitX(u2)-GetUnitX(u1))/3.14159*180
[/jass]

先感谢....不过....实在是看不懂的说...能稍微讲解一下吗?谢谢.
回复

使用道具 举报

发表于 2011-4-3 16:38:13 | 显示全部楼层
Atan就是arctan,是反正切三角函数啊,j不太看得懂,拿触发写了个
不过不太清楚怎样直接捕捉技能点的坐标
[trigger]未命名触发器 001
    事件
        单位 - 任意单位 开始施放技能
    条件
        (施放技能) 等于 震荡波
    动作
        设置 A = ((触发单位) 的位置)
        设置 a1 = (A 的X轴坐标)
        设置 a2 = (A 的Y轴坐标)
        设置 B = (技能施放点)
        设置 b1 = (B 的X轴坐标)
        设置 b2 = (B 的Y轴坐标)
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                a1 等于 b1
            Then - 动作
                如果所有条件成立则做动作1,否则做动作2
                    If - 条件
                        a2 大于 b2
                    Then - 动作
                        游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: 90
                    Else - 动作
                        游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: 270
            Else - 动作
                如果所有条件成立则做动作1,否则做动作2
                    If - 条件
                        a1 大于 b1
                    Then - 动作
                        游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: (转换 ((Atan(((b2 - a2) / (b1 - a1)))) + 180.00) 为字符串)
                    Else - 动作
                        游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: (转换 ((Atan(((b2 - a2) / (b1 - a1)))) + 0.00) 为字符串)
[/trigger]
回复

使用道具 举报

发表于 2011-4-3 17:38:33 | 显示全部楼层
极坐标位移点(WE的触发器好像就是这名字?)
从某个点开始,指定距离和角度,获得一个新的点。
[jass]
function PolarProjectionBJ takes location 初始点,real 距离,real 角度 returns location
local real x = GetLocationX(初始点) + 距离 * Cos(角度 * 3.14159/180)
local real y = GetLocationY(初始点) + 距离 * Sin(角度 * 3.14159/180)
return Location(x, y)
endfunction
[/jass]
回复

使用道具 举报

发表于 2011-4-3 18:21:04 | 显示全部楼层
ls的不符合条件啊,lz就是不想用点才求坐标的算法的
回复

使用道具 举报

发表于 2011-4-3 19:49:27 | 显示全部楼层
我記得西瓦在某演示裏面用過 具體什麼演示忘了。。
回复

使用道具 举报

发表于 2011-4-3 21:17:52 | 显示全部楼层
[jass]
// x1(基点坐标X轴) y1(基点坐标Y轴) x2(目标坐标X轴) y2(目标坐标Y轴)
//返回基点到目标角度
function PointToPointAngle takes real x1,real y1,real x2,real y2 returns real
    return Atan2(y2-y1,x2-x1)/3.14159*180
endfunction

// x1(基点坐标X轴) y1(基点坐标Y轴) angle(角度:单位度) distance(距离:基点到目标点的距离)
//返回目标点
function PointAngleToPoint takes real x1,real y1,real angle,real distance returns location
local real radangle=angle/180*3.14159
    return Location(x1+Cos(radangle)*distance,y1+Sin(radangle)*distance)
endfunction

// u(单位) angle(角度:单位度) distance(距离:基点到目标点的距离)
//通过单位,角度,距离算出目标点
//返回目标点
function UnitAngleToPoint takes unit u,real angle,real distance returns location
local real x1=GetUnitX(u)
local real y1=GetUnitY(u)
local real radangle=angle/180*3.14159
    return Location(x1+Cos(radangle)*distance,y1+Sin(radangle)*distance)
endfunction
[/jass]
回复

使用道具 举报

发表于 2011-4-3 21:18:57 | 显示全部楼层
①如果我没有记错的话……技能释放位置只能通过“GetSpellTargetLoc”也就是“技能释放点”函数获得……也就是说你是没有方法直接通过坐标获得技能释放位置……因此获得技能释放方向最好的方法就是“两点间的方向”了……

②而如果已知两点的坐标,求两点间方向,那么确实需要用到反三角函数:
[trigger]Test
    事件
        地图初始化
    条件
    动作
        设置 X1 = 0.00
        设置 Y1 = 0.00
        设置 X2 = -100.00
        设置 Y2 = -100.00
        设置 Angle = (Atan((Y2 - Y1) : (X2 - X1)))
        游戏 - 对 (所有玩家) 发送文本信息: (转换 Angle 为字符串)
[/trigger]
Angle就是从(X1,Y1)到(X2,Y2)角度。
回复

使用道具 举报

发表于 2011-4-3 21:26:41 | 显示全部楼层
角度要用Atan2才能算出[0,2π]
回复

使用道具 举报

 楼主| 发表于 2011-4-4 13:45:30 | 显示全部楼层
引用第12楼希瓦于2011-04-03 21:18发表的 :
①如果我没有记错的话……技能释放位置只能通过“GetSpellTargetLoc”也就是“技能释放点”函数获得……也就是说你是没有方法直接通过坐标获得技能释放位置……因此获得技能释放方向最好的方法就是“两点间的方向”了……

②而如果已知两点的坐标,求两点间方向,那么确实需要用到反三角函数:[trigger]Test
    事件
.......

感谢... 终于看到希瓦了.谢谢.
回复

使用道具 举报

发表于 2011-4-4 18:07:35 | 显示全部楼层
原来我们都是来打酱油的,希瓦才是主角啊……
回复

使用道具 举报

发表于 2011-4-4 18:10:06 | 显示全部楼层
应该感谢大家才对……其实我才是打酱油的……
回复

使用道具 举报

发表于 2011-4-5 17:36:17 | 显示全部楼层
…………………………
WE不是有“获得两点方向”的函数么………………
[jass]
function AngleBetweenPoints takes location locA,location locB returns real
    return bj_RADTODEG * Atan2(GetLocationY(locB) - GetLocationY(locA), GetLocationX(locB) - GetLocationX(locA))
endfunction

constant real bj_RADTODEG=180.0/bj_PI
constant real bj_PI=3.14159

native Atan2 takes real y,real x returns real

native GetLocationX takes location whichLocation returns real
native GetLocationY takes location whichLocation returns real
[/jass]
当WE有此功能的函数时,可以看看能不能用,好不好用。
好用就用了吧,不好用改造改造,无法改造的看看有没有替代函数,没有替代函数的看能不能模拟,不能模拟的就跳过。
回复

使用道具 举报

 楼主| 发表于 2011-4-9 23:08:05 | 显示全部楼层
引用第17楼『四裤全输』于2011-04-05 17:36发表的  :…………………………WE不是有“获得两点方向”的函数么………………[jass]function AngleBetweenPoints takes location locA,location locB returns real    return bj_RADTODEG * Atan2(GetLocationY(locB) - GetLocationY(locA), GetLocationX(locB) - GetLocationX(locA)).......
十分感谢,不过因为做技能的时候用的坐标……到了求方向的时候发现没有点……还有就是感谢大家……擦汗……没有无视大家的意思……只是希瓦每次写的很详细……习惯性的等待希瓦了……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-7-4 07:59 , Processed in 0.035535 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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