有效地移除具有相同斜率的点

时间:2010-04-27 10:22:12

标签: c# .net performance algorithm geometry

在我的一个应用程序中,我正在处理图形对象。我使用开源GPC library剪辑/合并两个形状。为了提高准确性,我正在对现有形状进行采样(在两条边之间添加多个点)。但在显示合并后的形状之前,我需要删除两条边之间的所有点。

但是我无法找到一个有效的算法来删除具有相同斜率和最小CPU利用率的两个边之间的所有点。目前所有点都是

类型
PointF 

我正在使用以下函数计算斜率

  private float Slope(PointF point1, PointF point2)
  {
     return (point2.Y - point1.Y) / (point2.X - point1.X);
  }

任何关于此的指针都将是一个很大的帮助。

3 个答案:

答案 0 :(得分:1)

您目前使用的算法是什么?我只能想到经历所有点,并且每个3检查中间点是否在由其他2个点定义的向量(或接近)上。 那个操作你需要数学吗?

答案 1 :(得分:0)

为了清楚起见,你有三个点A =(a,b),C =(c,d)和E =(e,f),并且想知道段AE是否经过C而你可以用单段AE替换AC和CE对吗?

斜率AC =(d-b)/(c-a)=斜率CE =(f-d)/(e-c)

通过分母相乘,你得到 (d-b)(e-c)=(f-d)(c-a)

这只是四次减法,两次乘法和一次比较。由于使用了浮点,您需要对某些容错进行比较。

答案 2 :(得分:0)

嗯..我找到了解决方案。我没有使用SDK提供的Sampling方法,而是创建了自己的采样方法,在固定距离的两点之间插入一个点。这减少了我需要处理的点数,从而减少了处理器的使用。