資源簡介
離散弗雷歇(Frechet)距離的計算,參考了前人(http://download.csdn.net/download/deltapan/4364154)的代碼,并實現了自底向上的動態規劃來減少遞歸時棧的使用,尤其是當曲線數據點比較多時。
代碼片段和文件信息
//?FrechetDist.cpp?:?Defines?the?entry?point?for?the?console?application.
//
#include?“stdafx.h“
#include?
typedef?struct?_sPoint
{
float?x;
float?y;
}sPoint;
#define?max(ab)?(((a)>(b))?(a):(b))
float?dis(sPoint?*p1?sPoint*?p2?int?i?int?j)
{
return?sqrt(pow(p1[i].x-p2[j].x2)?+?pow(p1[i].y-p2[j].y2));
}
float?min3(float?f1?float?f2?float?f3)
{
float?minf?=?(f1? minf?=?(minf? return?minf;
}
float?Cal(sPoint*?p1?sPoint?*p2float**?ca?int?i?int?j)
{
if(ca[i][j]?>?-1.0)
{
return?ca[i][j];
}
else?if(i?==?0?&&?j?==?0)
{
ca[i][j]?=?dis(p1p200);
}
else?if(i?>?0?&&?j?==?0)
{
ca[i][j]?=?max(Cal(p1p2cai-10)dis(p1p2i0));
}
else?if(i?==?0?&&?j?>?0)
{
ca[i][j]?=?max(Cal(p1p2ca0j-1)dis(p1p20j));
}
else?if(i?>?0?&&?j?>?0)
{
ca[i][j]?=?max(min3(?Cal(p1p2cai-1j)?Cal(p1p2cai-1j-1)?Cal(p1p2caij-1)?)?dis(p1p2ij));
}
else
{
ca[i][j]?=?0xFFFFFFFF;
}
return?ca[i][j];
}
float?calcFrechet(sPoint?*p1?int?p?sPoint*?p2?int?q)
{
//?init?ca[p][q]
float?**ca?=?new?float*[p];
for(int?i?=?0?;?i? {
ca[i]?=?new?float[q];
}
for(int?i?=?0?;?i? {
for(int?j?=?0?;?j? {
ca[i][j]?=?-1.0;
}
}
float?r=Cal(p1p2cap-1q-1);
for?(int?i=0;?i {
for
- 上一篇:西北工業大學C++語言大作業實驗報告
- 下一篇:房屋銷售系統
評論
共有 條評論