编程判断圆与线段是否相交.
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/19 07:55:46
编程判断圆与线段是否相交.
给出一条线段的两个端点,很多圆的圆心和半径,如何判断该线段和它们都不相交?给出算法就行,说明请尽量清楚.而且算法需要简单,计算量不能太大.(请注意不是单个圆,而是很多圆)
给出一条线段的两个端点,很多圆的圆心和半径,如何判断该线段和它们都不相交?给出算法就行,说明请尽量清楚.而且算法需要简单,计算量不能太大.(请注意不是单个圆,而是很多圆)
对于每个圆,计算圆心和线段的距离,当大于半径时,和圆相离,小于半径时,和圆相交,等于半径时,和圆相切.
再问: 感谢你的回答,但是请注意,我说的是线段,而且,我感觉用穷举的方法来计算每一个圆,很有可能会超时,我做的是acm编程题。所以还请高手不吝赐教。
再答: 两种方法: 1)线段也简单,先假定是直线,如果相交,就把交点计算出来,然后判断交点是否在线段范围内。 2)计算和圆心距离,如果不想交,还要再计算一下线段的端点和圆心距离,看是否在圆内。 第二种方法复杂度小。
再问: 可是,这个。。。有很多圆,如果一个一个的这样计算的话。。。估计够呛,这种方法的话,说句实话,我已经知道了。。我想问的是是否有更简单巧妙的办法。。
再答: 我来说个思路,就当是抛砖引玉。 以题设中的线段为直径画圆,称为O,假设O和大部分圆都是不相交的,那么线段必然也和这些圆不想交。计算两个圆是否相交复杂度就小很多,只需要计算出圆心O(圆心O即为线段中点)和别的圆心O'的距离,然后比较圆心距和半径之和的关系即可。这样的话可以筛选掉大部分圆,剩下的在用前述回答中的方法比较,或者你再想别的方法优化。
再问: 感谢你的回答,但是请注意,我说的是线段,而且,我感觉用穷举的方法来计算每一个圆,很有可能会超时,我做的是acm编程题。所以还请高手不吝赐教。
再答: 两种方法: 1)线段也简单,先假定是直线,如果相交,就把交点计算出来,然后判断交点是否在线段范围内。 2)计算和圆心距离,如果不想交,还要再计算一下线段的端点和圆心距离,看是否在圆内。 第二种方法复杂度小。
再问: 可是,这个。。。有很多圆,如果一个一个的这样计算的话。。。估计够呛,这种方法的话,说句实话,我已经知道了。。我想问的是是否有更简单巧妙的办法。。
再答: 我来说个思路,就当是抛砖引玉。 以题设中的线段为直径画圆,称为O,假设O和大部分圆都是不相交的,那么线段必然也和这些圆不想交。计算两个圆是否相交复杂度就小很多,只需要计算出圆心O(圆心O即为线段中点)和别的圆心O'的距离,然后比较圆心距和半径之和的关系即可。这样的话可以筛选掉大部分圆,剩下的在用前述回答中的方法比较,或者你再想别的方法优化。
opencv 线段相交怎么判断?
判断是否为素数,C语言编程
如图,已知在四边形ABCD中,AB=AD,BC=CD,AC与BD相交于点O,是判断AC是否是线段BD的垂直平分线,并说明
[数学][几何]如何判断射线是否相交
判断 如果两圆相交,那么公共弦垂直平分连接两圆圆心的线段
编程求两个圆相交部分面积
经过相交两圆的一个交点作两圆公共弦的垂线,判断这条直线上被两圆所截得的线段与两圆心之间线段的关系
求VB编程代码:判断一个数是否是素数?
编程判断一个5位数是否是回文数
MATLAB 判断两矩阵对应数字是否相等 如何编程
1、编程:输入正整数m,判断m是否素数.
如何编程判断一个数是否为正整数