hedgewars/uLandGenTemplateBased.pas
changeset 10226 cb63617a0c2f
parent 10225 0278759252b6
child 10387 cb17b79844b5
equal deleted inserted replaced
10225:0278759252b6 10226:cb63617a0c2f
    96 
    96 
    97 procedure FindPoint(si: LongInt; fillPointsCount: LongWord; var newPoint: TPoint; var pa: TPixAr);
    97 procedure FindPoint(si: LongInt; fillPointsCount: LongWord; var newPoint: TPoint; var pa: TPixAr);
    98 const mapBorderMargin = 40;
    98 const mapBorderMargin = 40;
    99     minDistance = 32; // adjust/parametrize this for different details size
    99     minDistance = 32; // adjust/parametrize this for different details size
   100 var p1, p2, p4, fp, mp: TPoint;
   100 var p1, p2, p4, fp, mp: TPoint;
   101     i, t1, t2, a, b, p, q, iy, ix, aqpb: LongInt;
   101     i, t1, t2, iy, ix, aqpb: LongInt;
       
   102     a, b, p, q: LongInt;
   102     dab, d, distL, distR: LongInt;
   103     dab, d, distL, distR: LongInt;
   103 begin
   104 begin
   104     // [p1, p2] is the segment we're trying to divide
   105     // [p1, p2] is the segment we're trying to divide
   105     p1:= pa.ar[si];
   106     p1:= pa.ar[si];
   106     p2:= pa.ar[si + 1];
   107     p2:= pa.ar[si + 1];
   187                 aqpb:= a * q - p * b;
   188                 aqpb:= a * q - p * b;
   188 
   189 
   189                 if (aqpb <> 0) then
   190                 if (aqpb <> 0) then
   190                 begin
   191                 begin
   191                     // (ix; iy) is intersection point
   192                     // (ix; iy) is intersection point
   192                     iy:= (((pa.ar[i].x - mp.x) * b + mp.y * a) * q - pa.ar[i].y * p * b) div aqpb;
   193                     iy:= ((Int64(pa.ar[i].x - mp.x) * b + Int64(mp.y) * a) * q - Int64(pa.ar[i].y) * p * b) div aqpb;
   193                     if abs(b) > abs(q) then
   194                     if abs(b) > abs(q) then
   194                         ix:= (iy - mp.y) * a div b + mp.x
   195                         ix:= (iy - mp.y) * a div b + mp.x
   195                     else
   196                     else
   196                         ix:= (iy - pa.ar[i].y) * p div q + pa.ar[i].x;
   197                         ix:= (iy - pa.ar[i].y) * p div q + pa.ar[i].x;
   197 
   198 
   218                 aqpb:= a * q - p * b;
   219                 aqpb:= a * q - p * b;
   219 
   220 
   220                 if (aqpb <> 0) then
   221                 if (aqpb <> 0) then
   221                 begin
   222                 begin
   222                     // (ix; iy) is intersection point
   223                     // (ix; iy) is intersection point
   223                     iy:= (((p1.x - mp.x) * b + mp.y * a) * q - p1.y * p * b) div aqpb;
   224                     iy:= ((Int64(p1.x - mp.x) * b + Int64(mp.y) * a) * q - Int64(p1.y) * p * b) div aqpb;
   224                     if abs(b) > abs(q) then
   225                     if abs(b) > abs(q) then
   225                         ix:= (iy - mp.y) * a div b + mp.x
   226                         ix:= (iy - mp.y) * a div b + mp.x
   226                     else
   227                     else
   227                         ix:= (iy - p1.y) * p div q + p1.x;
   228                         ix:= (iy - p1.y) * p div q + p1.x;
   228 
   229 
   237                 aqpb:= a * q - p * b;
   238                 aqpb:= a * q - p * b;
   238 
   239 
   239                 if (aqpb <> 0) then
   240                 if (aqpb <> 0) then
   240                 begin
   241                 begin
   241                     // (ix; iy) is intersection point
   242                     // (ix; iy) is intersection point
   242                     iy:= (((p2.x - mp.x) * b + mp.y * a) * q - p2.y * p * b) div aqpb;
   243                     iy:= ((Int64(p2.x - mp.x) * b + Int64(mp.y) * a) * q - Int64(p2.y) * p * b) div aqpb;
   243                     if abs(b) > abs(q) then
   244                     if abs(b) > abs(q) then
   244                         ix:= (iy - mp.y) * a div b + mp.x
   245                         ix:= (iy - mp.y) * a div b + mp.x
   245                     else
   246                     else
   246                         ix:= (iy - p2.y) * p div q + p2.x;
   247                         ix:= (iy - p2.y) * p div q + p2.x;
   247 
   248