diff options
| author | Ray <[email protected]> | 2021-04-06 21:40:05 +0200 |
|---|---|---|
| committer | Ray <[email protected]> | 2021-04-06 21:40:05 +0200 |
| commit | 6d3c66a179a108d02e7c5bcfd8eaf5233abe0a4d (patch) | |
| tree | b374a2783df83184672906b4dc32a5befa0165eb /src/shapes.c | |
| parent | 68124599e137eb763711703254eb9b9946ba5084 (diff) | |
| parent | b2545e053a65c603645b114ae5f54056cc386170 (diff) | |
| download | raylib-6d3c66a179a108d02e7c5bcfd8eaf5233abe0a4d.tar.gz raylib-6d3c66a179a108d02e7c5bcfd8eaf5233abe0a4d.zip | |
Merge branch 'master' of https://github.com/raysan5/raylib
Diffstat (limited to 'src/shapes.c')
| -rw-r--r-- | src/shapes.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/shapes.c b/src/shapes.c index bb1776cd..ae261118 100644 --- a/src/shapes.c +++ b/src/shapes.c @@ -224,13 +224,15 @@ void DrawCircleSector(Vector2 center, float radius, float startAngle, float endA endAngle = tmp; } - if (segments < 4) + int minSegments = (int)ceilf((endAngle - startAngle)/90); + + if (segments < minSegments) { // Calculate the maximum angle between segments based on the error rate (usually 0.5f) float th = acosf(2*powf(1 - SMOOTH_CIRCLE_ERROR_RATE/radius, 2) - 1); segments = (int)((endAngle - startAngle)*ceilf(2*PI/th)/360); - if (segments <= 0) segments = 4; + if (segments <= 0) segments = minSegments; } float stepLength = (endAngle - startAngle)/(float)segments; @@ -313,13 +315,15 @@ void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle = tmp; } - if (segments < 4) + int minSegments = (int)ceilf((endAngle - startAngle)/90); + + if (segments < minSegments) { // Calculate the maximum angle between segments based on the error rate (usually 0.5f) float th = acosf(2*powf(1 - SMOOTH_CIRCLE_ERROR_RATE/radius, 2) - 1); segments = (int)((endAngle - startAngle)*ceilf(2*PI/th)/360); - if (segments <= 0) segments = 4; + if (segments <= 0) segments = minSegments; } float stepLength = (endAngle - startAngle)/(float)segments; @@ -456,13 +460,15 @@ void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startA endAngle = tmp; } - if (segments < 4) + int minSegments = (int)ceilf((endAngle - startAngle)/90); + + if (segments < minSegments) { // Calculate the maximum angle between segments based on the error rate (usually 0.5f) float th = acosf(2*powf(1 - SMOOTH_CIRCLE_ERROR_RATE/outerRadius, 2) - 1); segments = (int)((endAngle - startAngle)*ceilf(2*PI/th)/360); - if (segments <= 0) segments = 4; + if (segments <= 0) segments = minSegments; } // Not a ring @@ -547,13 +553,15 @@ void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float s endAngle = tmp; } - if (segments < 4) + int minSegments = (int)ceilf((endAngle - startAngle)/90); + + if (segments < minSegments) { // Calculate the maximum angle between segments based on the error rate (usually 0.5f) float th = acosf(2*powf(1 - SMOOTH_CIRCLE_ERROR_RATE/outerRadius, 2) - 1); segments = (int)((endAngle - startAngle)*ceilf(2*PI/th)/360); - if (segments <= 0) segments = 4; + if (segments <= 0) segments = minSegments; } if (innerRadius <= 0.0f) |
