请高手帮忙!!!有关数据处理的问题
现在要编一个程序,情况是这样的:现在有的是一堆点构成一个点簇,但这个点簇可能由连起来可能是由几条线段组成的,现在要用迭代递归法把它们细分成更小的点簇。现在所有的点存在一个CPoint的向量容器vector中步骤:(1)先把起点A和终点B连起来
(2)求出所有点到这条线段的距离,找出最大距离的那个点也就是离线段最远的那个点记为C;
(3) 如果C到AB的距离大于一个阈值,则形成AC,CB;(否则的话就是表示这些点都是在一条线段上的了)
(4)分别对每一部分重复(2)和(3)的过程,直到分好为止;阈值固定
我才开始学,自己编了个可是觉得有点怪,不太懂怎么实现这个迭代?
各位大侠,下面这段程序可以吗?会不会有逻辑上的错误啊?(编译的话没问题了,就是有几个warning)我的意思是第一次调用merge会不会对第二次调用merge产生什么影响?
BOOL merge( VecPoint &m_Point )
{ VecPoint::iterator it;//VecPoint是存放CPoint的向量容器
VecPoint::iterator begin=m_Point.begin();
VecPoint::iterator end=m_Point.end();
VecPoint m_tempoint;
int max; //返回的距离最大值点的位置
int i=0,j=0;
double *distoline;
distoline=new double((int)m_Point.size());
double threshold1=0.01;
BOOL RE;
for(it=begin;it!=end;it++)
{
distoline[j]=GetNearestDistance(*begin,*(end--),*it);//求各点到线段的距离
j++;
}
max=maxdis(distoline,(int)m_Point.size());
if(distoline[max]>threshold1)
{ for(it=begin;i<=max;it++,i++)
{ m_tempoint.clear();
m_tempoint.push_back(*it);
}
RE=merge(m_tempoint);
m_Point.erase(begin,it);
if(RE&&merge(m_Point))==0)
{
return 0;
}
}
else
{ m_ArrayLinePoint.push_back(m_Point);
delete []distoline;
m_tempoint.clear();
m_Point.clear();
return true;
}
}