在C++里怎么判断两条直线是否重合
直线存储的时候端点的值为整型的,所以稍稍有那么点误差,怎么判断是否重合?
[解决办法]
斜率一样并且共享一点即重合。如果判断线段重合的话,还需要计算一下重叠区间才行。
[解决办法]
比较时设一个误差范围就行了。
[解决办法]
自己定义一个重合函数吧
l1,取点(x1,y11),(x2,Y12),...(xn,y1n)
l2,取点(x1,y21),(x2,Y22),...(xn,y2n)
计算s=sum((y11-y21)^2+(y21-y22)^+....+(y1n=y2n)^2)
如果小于某个值,判断为重合
[解决办法]
假设 两个线段重合成一直线,
那么一条线段上的任意一点,是另一条线段两个端点的定比分点。
如果对两个端点来说,误差都不大,就可以认为重合了。
[解决办法]
数学中的直线重合:斜率相等,这是严格的相等,然后共一个定点就算是重合了。。但是计算机中存储的数据都是离散的,是有误差的,是不能按照严格的斜率相等来判断的,再说浮点数的比较与运算本来就是存在误差的。所以还是最好自己定义一个重合的规则,当斜率误差在一定范围内时就算是重合,不过这个取点计算需要均匀,尽可能多的求出平均的误差
[解决办法]
#define 当前屏幕显示区中点误差 0.000001mm
定义斜率误差 0.000001
显示分辨率没有这么高
一般是96DPI 点间距(像素间距)为0.25~0.28mm左右,你这么高的分辨率,不好显示到屏幕上。
早期的显示器只有76DPI,点间距(像素间距)约为 0.33mm 左右
这么精确的误差,只能用在计算上,显示出来,绝对达不到这么高的精度!!!