找回密码
 点一下
查看: 2617|回复: 12

完成了:【全图贯穿轰炸】

[复制链接]
发表于 2010-11-7 22:55:02 | 显示全部楼层 |阅读模式
未命名2.JPG
今天应他人要求做一个小演示的。里面涉及一个求坐标的算法,我被恶心了

设P点坐标为(X。,Y。)   X轴到射线的角度为θ
坐标系有一框,边界为两个坐标轴以及X=a,Y=b这两条直线所围成的矩形

现求射线的 反向延长线 和 框 的交点 Q的坐标(X,Y)!!

我用T写了4个小时,结果,当θ在不同相限时方向出错。。。
   
============================分割,上述已经过去了=========================

星际争霸GOST的加强版~全图贯穿轰炸!!
gost.w3x (57 KB, 下载次数: 119)
发表于 2010-11-7 23:02:38 | 显示全部楼层
这个方法没有试过,以前用极位移坐标算出几个相关点并借此创建一个以此为顶点的矩形结果也出现了错误的情况,之后就没有再试过关于矩形方面的计算了。
回复

使用道具 举报

发表于 2010-11-7 23:03:10 | 显示全部楼层
P是平面内任意点还是矩形内任意点?
回复

使用道具 举报

 楼主| 发表于 2010-11-8 00:01:13 | 显示全部楼层
引用第2楼zhuzeitou于2010-11-07 23:03发表的  :
P是平面内任意点还是矩形内任意点?
是矩形内的点

刚在寝室朋友的点拨下在草稿上写出来了…把角度以180度为界限分情况谈论,其实想清楚了之后也不大困难。不过一开始真把我逼疯了…

明天在T上写一下试试。顺利的话可以把演示也做出来。
回复

使用道具 举报

 楼主| 发表于 2010-11-8 00:05:38 | 显示全部楼层
引用第2楼zhuzeitou于2010-11-07 23:03发表的  :
P是平面内任意点还是矩形内任意点?
是矩形内的点

刚在寝室朋友的点拨下在草稿上写出来了…把角度以180度为界限分情况谈论,其实想清楚了之后也不大困难。不过一开始真把我逼疯了…

明天在T上写一下试试。顺利的话可以把演示也做出来。
回复

使用道具 举报

发表于 2010-11-8 00:07:41 | 显示全部楼层
[jass]function FixTheta takes real theta returns real
    loop
        exitwhen theta >= 0
        set theta = theta + bj_PI * 2
    endloop
    loop
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exitwhen theta < bi_PI * 2
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set theta = theta - bj_PI * 2
&#160;&#160;&#160;&#160;endloop
&#160;&#160;&#160;&#160;return theta
endfunction

function GetBound takes location l, real theta, real a, real b returns location
&#160;&#160;&#160;&#160;local real x = GetLocationX(l)
&#160;&#160;&#160;&#160;local real y = GetLocationY(l)
&#160;&#160;&#160;&#160;local real x1
&#160;&#160;&#160;&#160;local real y1
&#160;&#160;&#160;&#160;local real tan
&#160;&#160;&#160;&#160;local real sin
&#160;&#160;&#160;&#160;local real cos
&#160;&#160;&#160;&#160;set theta = FixTheta(theta)
&#160;&#160;&#160;&#160;if (theta == bj_PI / 2) then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set x1 = x
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set y1 = 0
&#160;&#160;&#160;&#160;elseif (theta == bj_PI * 3 / 2) then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set x1 = x
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set y1 = b
&#160;&#160;&#160;&#160;elseif (theta == 0 then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set x1 = 0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set y1 = y
&#160;&#160;&#160;&#160;elseif (theta == bj_PI) then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set x1 = a
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set y1 = y
&#160;&#160;&#160;&#160;else
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set tan = Tan(theta)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set sin = Sin(theta)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set cos = Cos(theta)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set x1 = x - y / tan
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set y1 = 0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (not (x1 * (a - x1) >= 0 and (x - x1) * cos >= 0)) then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set x1 = x + (b - y) / tan
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set y1 = b
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (not (x1 * (a - x1) >= 0 and (x - x1) * cos >= 0)) then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set x1 = 0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set y1 = y - y * tan
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (not (y1 * (b - y1) >= 0 and (y - y1) * sin >= 0)) then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set x1 = a
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set y1 = y + (a - x) * tan
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (not (y1 * (b - y1) >= 0 and (y - y1) * sin >= 0)) then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return null
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;endif
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;endif
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;endif
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;endif
&#160;&#160;&#160;&#160;endif
&#160;&#160;&#160;&#160;return Location(x1, y1)
endfunction[/jass]

乱写的,无验证,甚至语法都没检测过,那些变量啊函数名啊也不知道对不对,代码也写得十分丑陋……
参考意义不明
回复

使用道具 举报

发表于 2010-11-8 00:09:00 | 显示全部楼层
我想,P不是矩形内就很可能没有Q了吧
回复

使用道具 举报

发表于 2010-11-8 00:10:07 | 显示全部楼层
嗯,可能多交点也可能无交点
回复

使用道具 举报

 楼主| 发表于 2010-11-8 12:21:56 | 显示全部楼层
不好意思,改了标题。顺便把演示贴上去了。
回复

使用道具 举报

发表于 2010-11-8 12:26:47 | 显示全部楼层

Re:算法完成了。于是有了演示

真暴力~~~
回复

使用道具 举报

发表于 2010-11-10 09:35:20 | 显示全部楼层
什麼是 gost?

飄過~~~~~~
回复

使用道具 举报

 楼主| 发表于 2010-11-10 10:11:55 | 显示全部楼层
引用第10楼wakeman于2010-11-10 09:35发表的 :
什麼是 gost?

飄過~~~~~~

啊……我错了。。。嗯,我找个借口吧,就说是防止带来封建迷信影响,取个谐音~
回复

使用道具 举报

发表于 2010-11-10 10:35:49 | 显示全部楼层
根据矩形定点判断交点是否在边上
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 09:18 , Processed in 0.091734 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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