@@ -571,8 +571,11 @@ void FeaturePart::removeDuplicatePoints()
571
571
if ( cost > 0.98 )
572
572
cost = 0.0001 ;
573
573
else
574
- cost = ( 1 - cost ) / 100 ;
574
+ cost = ( 1 - cost ) / 100 ; // < 0.0001, 0.01 > (but 0.005 is already pretty much)
575
575
576
+ // penalize positions which are further from the line's midpoint
577
+ double costCenter = vabs ( ll/2 - (l+xrm/2 ) ) / ll; // <0, 0.5>
578
+ cost += costCenter / 1000 ; // < 0, 0.0005 >
576
579
577
580
if (( vabs ( ey - by ) < EPSILON ) && ( vabs ( ex - bx ) < EPSILON ) )
578
581
{
@@ -723,7 +726,7 @@ void FeaturePart::removeDuplicatePoints()
723
726
double end_x = 0 ;
724
727
double end_y = 0 ;
725
728
726
- std::cerr << " segment len " << segment_length << " distance " << distance << std::endl;
729
+ // std::cerr << "segment len " << segment_length << " distance " << distance << std::endl;
727
730
if (segment_length - distance >= ci.width )
728
731
{
729
732
// if the distance remaining in this segment is enough, we just go further along the segment
@@ -883,15 +886,22 @@ void FeaturePart::removeDuplicatePoints()
883
886
{
884
887
diff = fabs (tmp->getAlpha () - angle_last);
885
888
if (diff > 2 *M_PI) diff -= 2 *M_PI;
889
+ diff = min (diff, 2 *M_PI - diff); // difference 350 deg is actually just 10 deg...
886
890
angle_diff += diff;
887
891
}
888
892
889
893
angle_last = tmp->getAlpha ();
890
894
tmp = tmp->getNextPart ();
891
895
}
892
- double cost = angle_diff/100.0 ;
896
+ double angle_diff_avg = angle_diff / (f->labelInfo ->char_num -1 ); // <0, pi> but pi/8 is much already
897
+ double cost = angle_diff_avg / 100 ; // <0, 0.031 > but usually <0, 0.003 >
893
898
if (cost < 0.0001 ) cost = 0.0001 ;
894
- std::cerr << " cost " << angle_diff << std::endl;
899
+
900
+ // penalize positions which are further from the line's midpoint
901
+ double labelCenter = (i*delta) + f->label_x /2 ;
902
+ double costCenter = vabs ( total_distance/2 - labelCenter ) / total_distance; // <0, 0.5>
903
+ cost += costCenter / 1000 ; // < 0, 0.0005 >
904
+ // std::cerr << "cost " << angle_diff << " vs " << costCenter << std::endl;
895
905
slp->setCost (cost);
896
906
897
907
positions->push_back (slp);
0 commit comments