我有一些按顺序排列的点,由用户绘制。
我想在这些点之间找到重要的点。正如我所定义的,重要的一点是我们点的方向突然改变的点。例如,手工绘制的“Z”,必须有两个重点。
我尝试计算相邻点之间的角度,但这并没有给我想要的结果。计算斜率的变化是一样的。
也许我需要以某种方式优化角度寻找,但我不知道。任何的想法?
编辑:这是比较角度的Java代码:
int nBreakPoints = 0;
double nextangle = 0;
double nextr;
double r = Math.sqrt(Math.pow(points[1].x-points[0].x, 2)
+ Math.pow(points[1].y-points[0].y, 2));
double angle = Math.asin((points[1].y-points[0].y) / r)*180/Math.PI;
double cumR = r;
int firstI = 0;
for(int i=1; i<points.length-2 ;i++)
{
nextr = (int) Math.sqrt(Math.pow(points[i].x-points[i+1].x, 2)
+ Math.pow(points[i+1].y-points[i].y, 2));
cumR += nextr;
if(cumR < 20 || cumR==0) continue;
nextangle = Math.asin((points[i].y-points[firstI].y) / cumR)*180/Math.PI;
if(Math.abs(angle-nextangle) >= 20) nBreakPoints++;
r = nextr;
angle = nextangle;
cumR = 0;
firstI = i;
}
好的,它只是计算两点之间的角度,如果它们不是 20 度,我们就有了一个新的重要点。
只是要注意,cumR
并firstI
添加以防止“太近”的点被带入计算。