equal
deleted
inserted
replaced
134 end; |
134 end; |
135 |
135 |
136 procedure Vector(p1, p2, p3: TPoint; var Vx, Vy: hwFloat); |
136 procedure Vector(p1, p2, p3: TPoint; var Vx, Vy: hwFloat); |
137 var d1, d2, d: hwFloat; |
137 var d1, d2, d: hwFloat; |
138 begin |
138 begin |
139 Vx:= p1.X - p3.X; |
139 Vx:= int2hwFloat(p1.X - p3.X); |
140 Vy:= p1.Y - p3.Y; |
140 Vy:= int2hwFloat(p1.Y - p3.Y); |
141 d:= Distance(p2.X - p1.X, p2.Y - p1.Y); |
141 d:= DistanceI(p2.X - p1.X, p2.Y - p1.Y); |
142 d1:= Distance(p2.X - p3.X, p2.Y - p3.Y); |
142 d1:= DistanceI(p2.X - p3.X, p2.Y - p3.Y); |
143 d2:= Distance(Vx, Vy); |
143 d2:= Distance(Vx, Vy); |
144 if d1 < d then d:= d1; |
144 if d1 < d then d:= d1; |
145 if d2 < d then d:= d2; |
145 if d2 < d then d:= d2; |
146 d:= d * _1div3; |
146 d:= d * _1div3; |
147 if d2.QWordValue = 0 then |
147 if d2.QWordValue = 0 then |
148 begin |
148 begin |
149 Vx:= 0; |
149 Vx:= _0; |
150 Vy:= 0 |
150 Vy:= _0 |
151 end else |
151 end else |
152 begin |
152 begin |
153 d2:= 1 / d2; |
153 d2:= _1 / d2; |
154 Vx:= Vx * d2; |
154 Vx:= Vx * d2; |
155 Vy:= Vy * d2; |
155 Vy:= Vy * d2; |
156 |
156 |
157 Vx:= Vx * d; |
157 Vx:= Vx * d; |
158 Vy:= Vy * d |
158 Vy:= Vy * d |
160 end; |
160 end; |
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: LongInt; |
166 tsq, tcb, t, r1, r2, r3: hwFloat; |
166 tsq, tcb, t, r1, r2, r3, cx1, cx2, cy1, cy2: 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); |
183 |
183 |
184 x1:= opa.ar[pi].x; |
184 x1:= opa.ar[pi].x; |
185 y1:= opa.ar[pi].y; |
185 y1:= opa.ar[pi].y; |
186 x2:= opa.ar[i].x; |
186 x2:= opa.ar[i].x; |
187 y2:= opa.ar[i].y; |
187 y2:= opa.ar[i].y; |
188 cx1:= x1 - PVx; |
188 cx1:= int2hwFloat(x1) - PVx; |
189 cy1:= y1 - PVy; |
189 cy1:= int2hwFloat(y1) - PVy; |
190 cx2:= x2 + NVx; |
190 cx2:= int2hwFloat(x2) + NVx; |
191 cy2:= y2 + NVy; |
191 cy2:= int2hwFloat(y2) + NVy; |
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); |
197 r1:= (_1 - t*3 + tsq*3 - tcb); |
198 r2:= ( 3*t - 6*tsq + 3*tcb); |
198 r2:= ( t*3 - tsq*6 + tcb*3); |
199 r3:= ( 3*tsq - 3*tcb); |
199 r3:= ( tsq*3 - tcb*3); |
200 X:= hwRound(r1 * x1 + r2 * cx1 + r3 * cx2 + tcb * x2); |
200 X:= hwRound(r1 * x1 + r2 * cx1 + r3 * cx2 + tcb * x2); |
201 Y:= hwRound(r1 * y1 + r2 * cy1 + r3 * cy2 + tcb * y2); |
201 Y:= hwRound(r1 * y1 + r2 * cy1 + r3 * cy2 + tcb * y2); |
202 t:= t + Delta; |
202 t:= t + Delta; |
203 pa.ar[pa.Count].x:= X; |
203 pa.ar[pa.Count].x:= X; |
204 pa.ar[pa.Count].y:= Y; |
204 pa.ar[pa.Count].y:= Y; |