怎样找到一个圆的中心点(100分)

  • 主题发起人 nicklung
  • 开始时间
N

nicklung

Unregistered / Unconfirmed
GUEST, unregistred user!
有人玩过联众的台球吗?
我想做个程序,能当鼠标点击到某个球上的时候,能判断出该球的中心点,当然,球的半径是已知的。
 
半径都知道了圆心不就能求了吗 具体要问什么
 
鼠标点击的不一定在圆的哪一个位置!
 
那你还不如实时维护这些球的圆心数组以及球的Z轴的信息,反正半径是知道的
建一个函数,当前点击的鼠标坐标,是参数,计算马上就能得出击打位置,距离力度,是哪个球等
可以建一个record数组,或用控件形式,要求速度的话,用前者好点
 
我没有说清楚,球的运动是在另一个程序中,我需要的是从屏幕中(或者从一张图片中)
鼠标点击一个圆的任意部分,从而定位一个圆的圆心,你可以下载这个程序,然后到联众
的台球游戏中去使用试试,我就是想达到这样的效果。
http://www.renju2002.com/download/taiqiu20.zip
 
有程序看,这就简单了,下面我分析的:99%是瞎猜,呵呵:)
我现在没装联众游戏,不过我玩过几吧,看过游戏界面等等
首先从编程的角度上说,单个球体估计类似一个timage的东西,是不是这可以查的出,
否则联众编程人员就要考虑太多的重画细节,用类似的timage来封装是有点可信的,即有图形DC
甚至hwnd之类的定位标志,我们知道通过GetCursorPos,可以获得坐标,WindowFromPoint
可以获得窗口句柄,在用ScreenToClient切换到真正的游戏窗口内框环境,由于球的窗口是正方形
用WindowFromPoint得到的窗口信息中很容易知道它的长宽,圆心也跟着出来了,于是知道了自己
球的圆心和对方球的圆心以及最后球的落点,就能通过公式计算出来怎么用力,两个球要打什么位
置等等。做后SetCursorPos,再mouseclick就可以了,当然力度应该用时钟的多少来衡量

如果球是直接在桌面上画出来的,那可能要用到图形识别了,比如用GetPixel取点判断像素的颜色
一般事先可能能分析出球边缘的特殊性,一旦找到共性后,就能识别一个大致球的轮廓,再求圆心

另外:如果球是timage的东西,也就是说完全能够获得双方当前所有的圆心坐标,那么完全能够
做成全自动的电脑智能桌球手,做得好的话,一个晚上赢N分,再卖分(不知道可不可以),是可能的
呵呵,瞎说,他卖10元,你可以卖20哦:)
 
直角三角形长边的中点。
 
真的非常感谢你 form2 , 你给了我一个非常好的思路
但是,我写了一段程序在联众台球中测试,无法用 WindowFromPoint 获得球的句柄
但我可以肯定,每一个球就是一个 Timage 之类的东东,但 WindowFromPoint 好像没法
获得该类的信息,还有其他的函数可用吗?
 
我刚装了台球游戏,它是用C语言结合纯winapi做的主程序,资源库用visual c++
制作,图片存在Billiard.pak里面,球分别用lball?.gif,ball?.gif表示
直接是查不到那个可能的类timage的句柄的,所以变相的认为没有句柄,于是问
题变通到图形识别上来了,我们可以替换lball?.gif,ball?.gif这几个文件,
比如黑外框、纯白表面,圆心有个单像素的红点,于是乎找圆心就变成找红点坐标
了反正对方看不到你改球了(双方的球都能改,用不同颜色的圆心代替唯一的球)
关键在于lball?.gif,ball?.gif的制作和替换,反正我行,我想你也可以,那个
VB程序员的做法值得研究,有空再看看
 
我已经在着手进行图象识别,替换球的做法不太好,会使使用者无法区分球之间的差别,
(别告诉我通过球心那一点颜色来区别,呵呵),还有一个办法是,当鼠标停留在某一个
球上时,一定时间后(大约2、3秒吧),会在球的上方出现提示框(提示该球的号码),
提示框相对于该球的位置是固定的,外框的颜色也是固定的,可以用它来定位球心!
目前在实现中遇到这样的问题:
1、GetPixel函数是取的某窗体内相对坐标的颜色,怎么取屏幕绝对坐标的color?
2、我需要由此外挂程序截取键盘输入(该程序需后台运行),该如何做?
 
定位球心我已经搞定了!form2,100分我就给你了。
现在是怎么截取键盘输入的问题,help
 
关注 。
 
你还不如学他的方法,form停留在顶端,焦点停留在form内,这样什么键你都能判断,
你取得是桌面图形,管谁是有焦点?
 
哦,外挂啊,还隐形在后台,那你就要做dll hook key了
通过GetPixelGetDC(GetDesktopWindow),mouseX,mouseY)就可以了
 
你可能没有注意到,他的程序是截取了key press的,在非活动状态也能获得击键
 
我没玩出你说的这种效果
 
接受答案了.
 
顶部