问题描述
现有一组二维点Ponit(intx,inty),可以绘制成一条曲线,这些点呈大概的线性,但是有偏移,希望找出其中线性规律最好的一段加以计算。也就是相邻的点的斜率最接近的。将偏移过大的曲线段去掉。望算法高手指点。
解决方案
解决方案二:
privatevoidCal(System.Drawing.Point[]pt){doublemax=0.00,min=0.00;intmaxIdex=0,minIndex=0;System.Collections.HashtablelinePoint=newHashtable();//点集System.Collections.HashtablekPoint=newHashtable();//斜率inti=0;foreach(Pointtemptinpt){linePoint[i]=tempt;i++;}/////////////计算斜率while(i>0){Pointtempt1=(Point)linePoint[i-1];Pointtempt2=(Point)linePoint[i];kPoint[i]=(double)(tempt2.Y-tempt1.Y)/(tempt2.X-tempt1.X);}////////////找出斜率最大和最小的值foreach(DictionaryEntryiteminkPoint){if(max<(double)item.Value){max=(double)item.Value;maxIdex=(int)item.Key;}if(min>(double)item.Value){min=(double)item.Value;minIndex=(int)item.Key;}}stringmaxk=kPoint[maxIdex].ToString();//最大斜率PointmaxBegin=(Point)linePoint[maxIdex-1];//最大斜率起点PointmaxEnd=(Point)linePoint[maxIdex];//最大斜率终点stringmink=kPoint[minIndex].ToString();//最小斜率PointminBegin=(Point)linePoint[minIndex-1];//最小斜率起点PointminEnd=(Point)linePoint[minIndex];//最大小斜率终点}