114 void arcTo(
Vec2 center,
float beginAngle,
float endAngle)
116 beginAngle = fmod(beginAngle, 2 * M_PI);
117 endAngle = fmod(endAngle, 2 * M_PI);
120 beginAngle += 2 * M_PI;
123 endAngle += 2 * M_PI;
124 endAngle = fmod(endAngle, 2 * M_PI);
128 endAngle += 2 * M_PI;
135 beginAngle += 2 * M_PI;
136 beginAngle = fmod(beginAngle, 2 * M_PI);
140 beginAngle += 2 * M_PI;
142 endAngle += 2 * M_PI;
145 if (abs(endAngle - beginAngle) < 1e-6 || abs(endAngle - beginAngle) >= 2 * M_PI - 1e-6)
147 for (
int q = 1; q <= 4; ++q)
154 bool isClockwise = endAngle < beginAngle;
158 if (endAngle > beginAngle)
159 endAngle -= 2 * M_PI;
161 for (
int q = 4; q >= 1; --q)
163 float quadrantStart = q * M_PI_2;
164 float quadrantEnd = (q - 1) * M_PI_2;
166 if (beginAngle > quadrantEnd && endAngle < quadrantStart)
168 float arcStart = std::min(beginAngle, quadrantStart);
169 float arcEnd = std::max(endAngle, quadrantEnd);
173 if (endAngle >= quadrantEnd)
179 if (endAngle < beginAngle)
180 endAngle += 2 * M_PI;
182 for (
int q = 1; q <= 4; ++q)
184 float quadrantStart = (q - 1) * M_PI_2;
185 float quadrantEnd = q * M_PI_2;
187 if (beginAngle < quadrantEnd && endAngle > quadrantStart)
189 float arcStart = std::max(beginAngle, quadrantStart);
190 float arcEnd = std::min(endAngle, quadrantEnd);
194 if (endAngle <= quadrantEnd)