首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找到1/0斜率相交的圆与线的点

如何找到1/0斜率相交的圆与线的点
EN

Stack Overflow用户
提问于 2013-09-23 16:38:33
回答 2查看 343关注 0票数 0

我正在用tkinter在Python 3中编写一个简单的2D自上而下游戏。所有可碰撞的物体都是圆/弧或线。我编写了以下方法来检测圆何时击中一行:

我使用的公式是y= mx +b和r^2 =(X)^2+(Y)^2。

代码语言:javascript
运行
复制
def CheckHitCToL(self, LX0, LY0, LX1, LY1, CX0, CX1, Tab):
    try:
        H = self.Creatures[Tab].X
        K = self.Creatures[Tab].Y
        R = abs((CX0 - CX1) / 2)
        M = (LY0 - LY1) / (LX0 - LX1)
        B = M * (-LX1) + LY1
        QA = (M * M) + 1
        QB = (-H - H) + (((B - K) * M) * 2)
        QC = (H * H) + ((B - K) * (B - K)) - (R * R)
        X = (- QB + sqrt((QB * QB) - (4 * QA * QC))) / (2 * QA)
        Y = (M * X) + B
        if ((X <= LX0 and X >= LX1) or (X >= LX0 and X <= LX1)) and ((Y <= LY0 and Y >= LY1) or (Y >= LY0 and Y <= LY1)):
            return True
        else:
            return False
    except:
        return False

我的问题是当你有一条垂直线时,M(或斜率)是(LY0 - LY1) / 0。(这是因为斜率等于上升/运行,垂直线没有运行,只是上升),这当然会返回一个错误,被try以外捕获,然后通知我的移动方法没有发生碰撞。当然,我可以简单地将"try:“移到几行,但仍然会抛出一个错误。如何使此程序在使用垂直行时不抛出错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-23 16:47:31

好吧,最明显的方法是使用if( (LX0 - LX1)==0 ),并分别执行这个示例。在这种情况下,您需要检查LX0和CX0之间的距离是否等于圆的半径。

票数 0
EN

Stack Overflow用户

发布于 2013-09-24 03:59:39

你可以用另一种形式的线方程-

隐式A*x + B*y + C = 0

或参数x = LX0 + t * (LX1 - LX0), y = LY0 + t *(LY1 - LY0)

经适当修改计算

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18964480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档