equal
deleted
inserted
replaced
161 |
161 |
162 procedure AddLoopPoints(var pa, opa: TPixAr; StartI, EndI: LongInt; Delta: hwFloat); |
162 procedure AddLoopPoints(var pa, opa: TPixAr; StartI, EndI: LongInt; Delta: hwFloat); |
163 var i, pi, ni: LongInt; |
163 var i, pi, ni: LongInt; |
164 NVx, NVy, PVx, PVy: hwFloat; |
164 NVx, NVy, PVx, PVy: hwFloat; |
165 x1, x2, y1, y2, cx1, cx2, cy1, cy2: hwFloat; |
165 x1, x2, y1, y2, cx1, cx2, cy1, cy2: hwFloat; |
166 tsq, tcb, t, r1, r2, r3, r4: hwFloat; |
166 tsq, tcb, t, r1, r2, r3: hwFloat; |
167 X, Y: LongInt; |
167 X, Y: LongInt; |
168 begin |
168 begin |
169 pi:= EndI; |
169 pi:= EndI; |
170 i:= StartI; |
170 i:= StartI; |
171 ni:= Succ(StartI); |
171 ni:= Succ(StartI); |
192 t:= 0; |
192 t:= 0; |
193 while t.Round = 0 do |
193 while t.Round = 0 do |
194 begin |
194 begin |
195 tsq:= t * t; |
195 tsq:= t * t; |
196 tcb:= tsq * t; |
196 tcb:= tsq * t; |
197 r1:= (1 - 3*t + 3*tsq - tcb) * x1; |
197 r1:= (1 - 3*t + 3*tsq - tcb); |
198 r2:= ( 3*t - 6*tsq + 3*tcb) * cx1; |
198 r2:= ( 3*t - 6*tsq + 3*tcb); |
199 r3:= ( 3*tsq - 3*tcb) * cx2; |
199 r3:= ( 3*tsq - 3*tcb); |
200 r4:= ( tcb) * x2; |
200 X:= hwRound(r1 * x1 + r2 * cx1 + r3 * cx2 + tcb * x2); |
201 X:= hwRound(r1 + r2 + r3 + r4); |
201 Y:= hwRound(r1 * y1 + r2 * cy1 + r3 * cy2 + tcb * y2); |
202 r1:= (1 - 3*t + 3*tsq - tcb) * y1; |
|
203 r2:= ( 3*t - 6*tsq + 3*tcb) * cy1; |
|
204 r3:= ( 3*tsq - 3*tcb) * cy2; |
|
205 r4:= ( tcb) * y2; |
|
206 Y:= hwRound(r1 + r2 + r3 + r4); |
|
207 t:= t + Delta; |
202 t:= t + Delta; |
208 pa.ar[pa.Count].x:= X; |
203 pa.ar[pa.Count].x:= X; |
209 pa.ar[pa.Count].y:= Y; |
204 pa.ar[pa.Count].y:= Y; |
210 inc(pa.Count); |
205 inc(pa.Count); |
211 TryDo(pa.Count <= cMaxEdgePoints, 'Edge points overflow', true) |
206 TryDo(pa.Count <= cMaxEdgePoints, 'Edge points overflow', true) |