作业帮 > 综合 > 作业

编程判断圆与线段是否相交.

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/16 13:26:34
编程判断圆与线段是否相交.
给出一条线段的两个端点,很多圆的圆心和半径,如何判断该线段和它们都不相交?给出算法就行,说明请尽量清楚.而且算法需要简单,计算量不能太大.(请注意不是单个圆,而是很多圆)
对于每个圆,计算圆心和线段的距离,当大于半径时,和圆相离,小于半径时,和圆相交,等于半径时,和圆相切.
再问: 感谢你的回答,但是请注意,我说的是线段,而且,我感觉用穷举的方法来计算每一个圆,很有可能会超时,我做的是acm编程题。所以还请高手不吝赐教。
再答: 两种方法: 1)线段也简单,先假定是直线,如果相交,就把交点计算出来,然后判断交点是否在线段范围内。 2)计算和圆心距离,如果不想交,还要再计算一下线段的端点和圆心距离,看是否在圆内。 第二种方法复杂度小。
再问: 可是,这个。。。有很多圆,如果一个一个的这样计算的话。。。估计够呛,这种方法的话,说句实话,我已经知道了。。我想问的是是否有更简单巧妙的办法。。
再答: 我来说个思路,就当是抛砖引玉。 以题设中的线段为直径画圆,称为O,假设O和大部分圆都是不相交的,那么线段必然也和这些圆不想交。计算两个圆是否相交复杂度就小很多,只需要计算出圆心O(圆心O即为线段中点)和别的圆心O'的距离,然后比较圆心距和半径之和的关系即可。这样的话可以筛选掉大部分圆,剩下的在用前述回答中的方法比较,或者你再想别的方法优化。