一个平面上,有近200万的坐标点,这些坐标点是无序的。
如果在平面上随意画一个圆,如何快速找出圆内的点和圆圈上的点?
如果在平面上随意画一个圆,如何快速找出圆内的点和圆圈上的点?
解决方案 »
- delphi6补丁2安装不上
- 给介绍一个文本编辑控件,多谢了!
- 赐教,在stringgrid的各个cells中如何通过选择操作系统的输入法来任意输入汉字或俄文.
- 如何与MDI的子窗体通信
- 如何改变.exe文件中的窗体的背景图片和文字?
- 使用OleContainer加入WORD文件时,如何使Word自带的快捷菜单“复制”和“粘贴”不可用?
- TDateTime 变量能做循环吗?
- 专家求助,ocx发布!
- 怎么能让Form的标题栏在Form未处于当前窗口时不“变灰”
- 急急急急delphi excel导入access,再从access里提取数据然后生成曲线,然后打印,全部的分数都送出来了,如果不够,有了再给,钱也可以,急用了,谢谢了
- 初学indy,udp发送信息问题
- 求个取字符串函数
但由于离散系统, 所以必须按以下修正
如果 r - 0.5 <= d <= r + 0.5 , 则可以认为点在圆上
如果 d < r-0.5, 则可以认为点在圆内为了快速判断, 首先对于所有点(x, y)
如果 (x - x0 > r+1) or (y - y0 > r + 1), 则可以直接判断其在圆外
然后只对剩下的点, 计算距离d, 并使用上面的方法进行判断
如果你想提高速度, 在此之前, 你可以根据以下条件就可以判断点肯定在圆内
|x-x0| + |y-y0| <= r - 1 (注: |x| 表示 x 的绝对值), 当然, 这是原理, 实现的你时候,
你如果调用两次绝对值函数那就慢了算法很快的, 你只用使用距离的平方比较就可以了
对于 (r-0.5)^2 及 (r+0.5)^2 只需要计算一次, 并取整保存备用即可
则 (x-x0)^2 + (y-y0)^2 计算很快, 两次整数减法 两次整数乘法 一次整数加法
再加三次整数比较
对每个点计算机处理的时钟周期在100之内
就算前几步没有滤除点, 200万个点全计算一次, 对于 2.0 GHz的CPU, 也只需要1秒钟不到使用以上算法, 在一般情况下, 0.5秒内可以计算出结果, 在最差情况下, 1秒也可以计算出结果
(对于 2.0GHz CPU)楼主想要在多长时间内完成