|
@@ -303,10 +303,13 @@ void RoadDigit::CalcLine(double fspace)
|
|
|
int ncount = ppp3->GetLength() /fspace;
|
|
|
if(ncount < 5)ncount = 5;
|
|
|
double sstep;
|
|
|
+ double arclength = ppp3->GetLength();
|
|
|
if(ncount > 0)sstep = ppp3->GetLength()/ncount;
|
|
|
else sstep = 10000.0;
|
|
|
double s = 0;
|
|
|
double xtem,ytem;
|
|
|
+ double pr;
|
|
|
+
|
|
|
xtem = ppp3->GetuA() + ppp3->GetuB() * s + ppp3->GetuC() * s*s + ppp3->GetuD() * s*s*s;
|
|
|
ytem = ppp3->GetvA() + ppp3->GetvB() * s + ppp3->GetvC() * s*s + ppp3->GetvD() * s*s*s;
|
|
|
x = xtem*cos(ppp3->GetHdg()) - ytem * sin(ppp3->GetHdg()) + ppp3->GetX();
|
|
@@ -323,9 +326,10 @@ void RoadDigit::CalcLine(double fspace)
|
|
|
double flasty = pg->GetY();
|
|
|
while(s <= ppp3->GetLength())
|
|
|
{
|
|
|
-
|
|
|
- xtem = ppp3->GetuA() + ppp3->GetuB() * s + ppp3->GetuC() * s*s + ppp3->GetuD() * s*s*s;
|
|
|
- ytem = ppp3->GetvA() + ppp3->GetvB() * s + ppp3->GetvC() * s*s + ppp3->GetvD() * s*s*s;
|
|
|
+ double pr= 1.0;
|
|
|
+ if(arclength > 1)pr = s/arclength;
|
|
|
+ xtem = ppp3->GetuA() + ppp3->GetuB() * pr + ppp3->GetuC() * pr*pr + ppp3->GetuD() * pr*pr*pr;
|
|
|
+ ytem = ppp3->GetvA() + ppp3->GetvB() * pr + ppp3->GetvC() * pr*pr + ppp3->GetvD() * pr*pr*pr;
|
|
|
x = xtem*cos(ppp3->GetHdg()) - ytem * sin(ppp3->GetHdg()) + ppp3->GetX();
|
|
|
y = xtem*sin(ppp3->GetHdg()) + ytem * cos(ppp3->GetHdg()) + ppp3->GetY();
|
|
|
|