读书人

怎么求直线和圆的两个焦点?大家帮一下

发布时间: 2012-05-09 12:13:59 作者: rapoo

如何求直线和圆的两个焦点?大家帮一下忙吧,谢谢大家。
问题:已知一个点的坐标,已知一个圆的圆心坐标,和该圆的半径,求该点与圆心连成的直线与圆的两个交点,用C++编程怎么编才能把这两个交点求出来?谢谢大家的帮助。

[解决办法]
把直线光栅化(分成一个一个的坐标点,存储到一个数组中),在分别判断圆心到这些点的距离,如果等于半径就是交点。
还可以用数学方法,用圆和直线的方程去计算,不过这个要数学学的好才行
[解决办法]

探讨

哦,用数学的方法太麻烦了,
把直线光栅化的代码怎么写呢,我还没有学。

[解决办法]
x = x0 +/- (x1 - x0)*r/sqrt((x1 - x0)^2 + (y1 - y0)^2)
y = y0 +/- (y1 - y0)*r/ sqrt((x1 - x0)^2 + (y1 - y0)^2)
其中,(x0, y0)是圆心坐标,(x1, y1)是已知点坐标,r是半径
[解决办法]
探讨

请问老师x = x0 +/- (x1 - x0)*r/sqrt((x1 - x0)^2 + (y1 - y0)^2)中的“ +/-”是什么意思呢?

[解决办法]
学会了上论坛也不能忘记自己学过几何吧?画一圆,画一点,圆心与点的直线能写出解析式吧?圆的方程会写吧?二元方程组会解吧?这不就出来了。这种问题以后不要问,自己解出来。缺乏了思考和独立解决问题的过程,你的收获与你的付出将不匹配。
[解决办法]
还是用数学方法吧。用光栅的话那些图形都变成了矩阵点了,很多情况下“直线”正好过“圆”的像素错切位置,结果求出来没有交点的...你说不是要笑掉大牙了... 还是用数学解析式吧,性能保证不说,结果也不会错。。。多好...
[解决办法]
用向量做容易理解一点。
圆心为P点,A点是给定的坐标点。R是圆心半径,Pi圆周率。
B点和C点就是要求的2个坐标点
计算向量PA = 向量A-向量P。
把PA换算成极坐标表示法。
向量PB的角度=PA,长度=圆半径R
向量PC的角度=PA+Pi,长度=圆半径R
把向量PB、PC从极坐标转换为直角坐标表示法
2种坐标系互相转换有很简单的计算公式的,无非就是平方开方和三角函数什么的
[解决办法]
探讨
用向量做容易理解一点。
圆心为P点,A点是给定的坐标点。R是圆心半径,Pi圆周率。
B点和C点就是要求的2个坐标点
计算向量PA = 向量A-向量P。
把PA换算成极坐标表示法。
向量PB的角度=PA,长度=圆半径R
向量PC的角度=PA+Pi,长度=圆半径R
把向量PB、PC从极坐标转换为直角坐标表示法
2种坐标系互相转换有很简单的计算公式的,无非就是平方开方和三角函数什么的

[解决办法]
用向量做,非常简单,高中数学要是有这么简单该多好。
[解决办法]
计算几何大牛:http://www.codeproject.com/KB/recipes/Wykobi.aspx

读书人网 >C++

热点推荐