Skip to content

Commit 205aa2a

Browse files
authored
Boundary accuracy improvement
1 parent 2a31799 commit 205aa2a

File tree

2 files changed

+68
-24
lines changed

2 files changed

+68
-24
lines changed

src/SpeeduinoGL.cpp

Lines changed: 66 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ DoubleFloat PolarizedTwoLineRasterizer(int32_t CellStartX, int32_t CellEndX, flo
136136
}
137137

138138

139+
139140
DoubleFloat 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+

src/SpeeduinoGL.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ DoubleFloat PolarizedTwoLineRasterizer(int32_t CellStartX, int32_t CellEndX, flo
4242
__attribute__((always_inline))
4343
DoubleFloat TwoLineRasterizer(int32_t CellStartX, int32_t CellEndX, float PointerCoordinateH, float PointerEndH, float Gradient1, float Gradient2, uint16_t Colour);
4444

45-
void FillCircle(float Radius, uint16_t Colour, Point Centre);
45+
46+
void FillCircle(float Radius, uint16_t Colour, Point Centre);
4647

4748
void TransferSquares(float ShiftH, float ShiftV, float zoom, float rotationRad);
4849

0 commit comments

Comments
 (0)