summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorfrithrah <[email protected]>2021-04-06 13:29:58 +0100
committerGitHub <[email protected]>2021-04-06 14:29:58 +0200
commitb2545e053a65c603645b114ae5f54056cc386170 (patch)
tree5be1a387be41c0d4a0fe6fb732f5374f1dd44048 /src
parent109d00cb14dc4792ab0b8256112b39f1c10112ba (diff)
downloadraylib-b2545e053a65c603645b114ae5f54056cc386170.tar.gz
raylib-b2545e053a65c603645b114ae5f54056cc386170.zip
Minimum number of segments in circle sector functions changed from hard-coded to based on degree range. (#1707)
Co-authored-by: Simon <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/shapes.c24
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)