@@ -136,6 +136,7 @@ DoubleFloat PolarizedTwoLineRasterizer(int32_t CellStartX, int32_t CellEndX, flo
136136 }
137137
138138
139+
139140DoubleFloat TwoLineRasterizer (int32_t CellStartX, int32_t CellEndX, float PointerCoordinateH, float PointerEndH, float Gradient1, float Gradient2, uint16_t Colour) {
140141
141142
@@ -268,11 +269,30 @@ void TransferSquares(float ShiftH, float ShiftV, float zoom, float rotationRad)
268269 float grad2;
269270
270271
272+
273+ float offsetH1 = abs (VShift);
274+ float offsetH2 = abs (HShift);
275+ float offsetV1 = abs (VShift) + abs (HShift);
276+ float offsetV2 = 0 ;
277+
278+
279+
271280
272281 bool Polarized = 0 ;
282+
283+
284+ if (sin (rotationRad) <= 0 ) {
285+ std::swap (offsetH1, offsetH2);
286+ std::swap (offsetV1, offsetV2);
287+
288+ };
289+
273290
274291 if (sin (2 * rotationRad) <= 0 ) {
275292 std::swap (gradient1, gradient2);
293+ std::swap (offsetH2, offsetV1);
294+ std::swap (offsetH1, offsetV2);
295+
276296 };
277297
278298 if (sin (4 * rotationRad) <= 0 ) {
@@ -288,11 +308,23 @@ void TransferSquares(float ShiftH, float ShiftV, float zoom, float rotationRad)
288308
289309 float CellPointerH = ShiftH;
290310 float CellPointerV = ShiftV;
311+
312+ // rotationRad+=PI/4;
313+ // zoom /= sqrt(2);
314+
315+ float BoundStartH = - offsetH1;
316+ float BoundEndH = ResH + offsetH2;
317+ float BoundStartV = - offsetV1;
318+ float BoundEndV = ResV + offsetV2;
319+
320+ // float InsideStartH = -1 + offsetH2;
321+ // float InsideEndH = ResH - offsetH1;
322+ // float InsideStartV = -1 + offsetV2;
323+ // float InsideEndV = ResV - offsetV1;
324+
325+
326+
291327
292- const float BoundStartH = 0 - zoom - abs (VShift);
293- const float BoundStartV = 0 - zoom - abs (HShift);
294- const float BoundEndH = ResH + zoom + abs (VShift);
295- const float BoundEndV = ResV + zoom + abs (HShift);
296328
297329 bool RowsPassed = 0 ;
298330
@@ -355,25 +387,32 @@ void TransferSquares(float ShiftH, float ShiftV, float zoom, float rotationRad)
355387
356388 };
357389
358- DoubleFloat WouldWork =
359- PolarizedTwoLineRasterizer (ceil (square.A .w ), ceil (square.B .w ),
360- square.A .h + grad2 * (ceil (square.A .w ) - square.A .w ),
361- square.A .h + grad1 * (ceil (square.A .w ) - square.A .w ),
362- grad1, grad2, Colour, Polarized);
363-
364- if (Polarized) { std::swap (WouldWork.Float1 , WouldWork.Float2 ); };
365- WouldWork =
366- PolarizedTwoLineRasterizer (ceil (square.B .w ), ceil (square.D .w ),
367- WouldWork.Float2 ,
368- square.B .h + grad2 * (ceil (square.B .w ) - square.B .w ),
369- grad2, grad2, Colour, Polarized);
370-
371- if (Polarized) { std::swap (WouldWork.Float1 , WouldWork.Float2 ); };
372- PolarizedTwoLineRasterizer (ceil (square.D .w ), ceil (square.C .w ),
373- square.D .h + grad1 * (ceil (square.D .w ) - square.D .w ),
374- WouldWork.Float1 ,
375- grad2, grad1, Colour, Polarized);
376-
390+
391+
392+
393+
394+ DoubleFloat WouldWork =
395+ PolarizedTwoLineRasterizer (ceil (square.A .w ), ceil (square.B .w ),
396+ square.A .h + grad2 * (ceil (square.A .w ) - square.A .w ),
397+ square.A .h + grad1 * (ceil (square.A .w ) - square.A .w ),
398+ grad1, grad2, Colour, Polarized);
399+
400+ if (Polarized) { std::swap (WouldWork.Float1 , WouldWork.Float2 ); };
401+ WouldWork =
402+ PolarizedTwoLineRasterizer (ceil (square.B .w ), ceil (square.D .w ),
403+ WouldWork.Float2 ,
404+ square.B .h + grad2 * (ceil (square.B .w ) - square.B .w ),
405+ grad2, grad2, Colour, Polarized);
406+
407+ if (Polarized) { std::swap (WouldWork.Float1 , WouldWork.Float2 ); };
408+ PolarizedTwoLineRasterizer (ceil (square.D .w ), ceil (square.C .w ),
409+ square.D .h + grad1 * (ceil (square.D .w ) - square.D .w ),
410+ WouldWork.Float1 ,
411+ grad2, grad1, Colour, Polarized);
412+
413+
414+
415+
377416 } else if (BoundaryPassed == 1 ) {
378417 goto ByPassROLine;
379418
@@ -409,3 +448,7 @@ void TransferSquares(float ShiftH, float ShiftV, float zoom, float rotationRad)
409448
410449
411450 }
451+
452+
453+
454+
0 commit comments