307 double r = maxRadius / 2;
308 double rStep = r / 2;
312 double bestR = maxRadius;
313 upperRange->
tMin = 0;
314 lowerRange->
tMin = 1;
331 SkDebugf(
"u bestCCW=%d ccw=%d bestMin=%1.9g:%1.9g r=%1.9g tMin=%1.9g\n",
332 bestCCW, tRange.
ccw, lowerRange->
tMin, upperRange->
tMin, r,
335 if (bestCCW >= 0 && bestCCW != (
int) tRange.
ccw) {
336 if (tRange.
tMin < upperRange->
tMin) {
337 upperRange->
tMin = 0;
342 if (upperRange->
tMin < tRange.
tMin) {
343 bestCCW = tRange.
ccw;
345 *upperRange = tRange;
347 if (lowerRange->
tMin > tRange.
tMin) {
348 *lowerRange = tRange;
351 r += stepUp ? rStep : -rStep;
353 }
while (rStep > FLT_EPSILON);
358 double lastHighR = bestR;
366 SkDebugf(
"l bestCCW=%d ccw=%d bestMin=%1.9g:%1.9g r=%1.9g tMin=%1.9g\n",
367 bestCCW, tRange.
ccw, lowerRange->
tMin, upperRange->
tMin, r,
370 if (bestCCW != (
int) tRange.
ccw || upperRange->
tMin < tRange.
tMin) {
371 bestCCW = tRange.
ccw;
372 *upperRange = tRange;
389 if (upperRange->
tMin < tRange.
tMin) {
390 *upperRange = tRange;
392 if (lowerRange->
tMin > tRange.
tMin) {
393 *lowerRange = tRange;
396 lastHighR = std::min(r, lastHighR);
398 r += success ? -rStep : rStep;
400 }
while (rStep > FLT_EPSILON);
401 }
while (rStep > FLT_EPSILON);
404 SkDebugf(
"l a2-a1==%1.9g\n", lowerRange->
a2 - lowerRange->
a1);
453 double a1s = atan2(origin.
fY - quad1[1].fY, quad1[1].fX - origin.
fX);
454 double a1e = atan2(origin.
fY - quad1[2].fY, quad1[2].fX - origin.
fX);
455 double a2s = atan2(origin.
fY - quad2[1].fY, quad2[1].fX - origin.
fX);
456 double a2e = atan2(origin.
fY - quad2[2].fY, quad2[2].fX - origin.
fX);
461 bool realMatchesOverlap = realOverlap == overlap ||
SK_ScalarPI - fabs(a2s - a1s) < 0.002;
462 if (realOverlap != overlap) {
465 if (!realMatchesOverlap) {
466 DumpQ(quad1, quad2, testNo);
469 if (oldSchoolOverlap != (overlap < 0)) {
477 double vDir[2] = { v1s.
cross(v1e), v2s.
cross(v2e) };
478 bool ray1In2 = v1s.
cross(v2s) * vDir[1] <= 0 && v1s.
cross(v2e) * vDir[1] >= 0;
479 bool ray2In1 = v2s.
cross(v1s) * vDir[0] <= 0 && v2s.
cross(v1e) * vDir[0] >= 0;
484 bool ctrl1In2 = v1e.
cross(v2s) * vDir[1] <= 0 && v1e.
cross(v2e) * vDir[1] >= 0;
486 bool ctrl2In1 = v2e.
cross(v1s) * vDir[0] <= 0 && v2e.
cross(v1e) * vDir[0] >= 0;
492 SkDLine rays[] = {{{origin, quad2[2]}}, {{origin, quad1[2]}}};
493 const SkDQuad* quads[] = {&quad1, &quad2};
496 double minX, minY, maxX, maxY;
500 bool useIntersect =
false;
501 double smallestTs[] = {1, 1};
502 for (
unsigned index = 0; index < std::size(quads); ++index) {
503 const SkDQuad& q = *quads[index];
504 midSpokes[index] = q.
ptAtT(0.5) - origin;
505 minX = std::min(std::min(std::min(minX, origin.
fX), q[1].fX), q[2].fX);
506 minY = std::min(std::min(std::min(minY, origin.
fY), q[1].fY), q[2].fY);
507 maxX = std::max(std::max(std::max(maxX, origin.
fX), q[1].fX), q[2].fX);
508 maxY = std::max(std::max(std::max(maxY, origin.
fY), q[1].fY), q[2].fY);
509 maxWidth = std::max(maxWidth, std::max(maxX - minX, maxY - minY));
510 intersect[index].intersectRay(q, rays[index]);
513 bool foundZero =
false;
515 for (
int idx2 = 0; idx2 < i.
used(); ++idx2) {
516 double t = i[0][idx2];
531 if (ray.
fX *
end.fX < 0 || ray.
fY *
end.fY < 0) {
534 double rayDist = ray.
length();
535 double endDist =
end.length();
536 double delta = fabs(rayDist - endDist) / maxWidth;
538 useIntersect ^=
true;
540 smallestTs[index] = smallT;
544 int sIndex = (
int) (smallestTs[1] < 1);
546 double t = smallestTs[sIndex];
547 const SkDQuad& q = *quads[sIndex];
550 double rayDist = ray.
length();
551 double endDist =
end.length();
555 SkDebugf(
"rayDist>endDist:%d sIndex==0:%d vDir[sIndex]<0:%d midXray<0:%d\n",
556 rayDist > endDist, sIndex == 0, vDir[sIndex] < 0, midXray < 0);
560 firstInside = (rayDist > endDist) ^ (sIndex == 0) ^ (vDir[sIndex] < 0);
561 }
else if (overlap >= 0) {
570 SkASSERT(realEnds == (firstInside ? 1 : 0));
670{{{-770.8492431640625, 948.2369384765625}, {-853.37066650390625, 972.0301513671875}, {-200.62042236328125, -26.7174072265625}}},
671{{{-770.8492431640625, 948.2369384765625}, {513.602783203125, 578.8681640625}, {960.641357421875, -813.69757080078125}}},
672{{{563.8267822265625, -107.4566650390625}, {-44.67724609375, -136.57452392578125}, {492.3856201171875, -268.79644775390625}}},
673{{{563.8267822265625, -107.4566650390625}, {708.049072265625, -100.77789306640625}, {-48.88226318359375, 967.9022216796875}}},
674{{{598.857421875, 846.345458984375}, {-644.095703125, -316.12921142578125}, {-97.64599609375, 20.6158447265625}}},
675{{{598.857421875, 846.345458984375}, {715.7142333984375, 955.3599853515625}, {-919.9478759765625, 691.611328125}}},
677 TRange lowerRange, upperRange;
678 SkDQuad quads[std::size(qPts)];
679 for (
int index = 0; index < (
int) std::size(qPts); ++index) {
704 {{{-708.0077926931004,-154.61669472244046},
705 {-707.9234268635319,-154.30459999551294},
706 {505.58447265625,-504.9130859375}}},
707 {{{-708.0077926931004,-154.61669472244046},
708 {-711.127526325141,-163.9446090624656},
709 {-32.39227294921875,-906.3277587890625}}},
711 {{{-708.0077926931004,-154.61669472244046},
712 {-708.2875337527566,-154.36676458635623},
713 {505.58447265625,-504.9130859375}}},
714 {{{-708.0077926931004,-154.61669472244046},
715 {-708.4111557216864,-154.5366642875255},
716 {-32.39227294921875,-906.3277587890625}}},
718 {{{-609.0230951752058,-267.5435593490574},
719 {-594.1120809906336,-136.08492475411555},
720 {505.58447265625,-504.9130859375}}},
721 {{{-609.0230951752058,-267.5435593490574},
722 {-693.7467719138988,-341.3259237831895},
723 {-32.39227294921875,-906.3277587890625}}}
725 {{{-708.0077926931004,-154.61669472244046},
726 {-707.9994640658723,-154.58588461064852},
727 {505.58447265625,-504.9130859375}}},
728 {{{-708.0077926931004,-154.61669472244046},
729 {-708.0239418990758,-154.6403553507124},
730 {-32.39227294921875,-906.3277587890625}}}
732 {{{-708.0077926931004,-154.61669472244046},
733 {-707.9993222215099,-154.55999389855003},
734 {68.88981098017803,296.9273945411635}}},
735 {{{-708.0077926931004,-154.61669472244046},
736 {-708.0509091919608,-154.64675214697067},
737 {-777.4871194247767,-995.1470120113145}}}
739 {{{-708.0077926931004,-154.61669472244046},
740 {-708.0060491116379,-154.60889321524968},
741 {229.97088707895057,-430.0569357467175}}},
742 {{{-708.0077926931004,-154.61669472244046},
743 {-708.013911296257,-154.6219143988058},
744 {138.13162892614037,-573.3689311737394}}}
746 {{{-543.2570545751013,-237.29243831075053},
747 {-452.4119186056987,-143.47223056267802},
748 {229.97088707895057,-430.0569357467175}}},
749 {{{-543.2570545751013,-237.29243831075053},
750 {-660.5330371214436,-362.0016148388},
751 {138.13162892614037,-573.3689311737394}}},