|
1 | 1 | /*******************************************************************************
|
2 | 2 | * Author : Angus Johnson *
|
3 |
| -* Date : 13 December 2023 * |
| 3 | +* Date : 22 December 2023 * |
4 | 4 | * Website : http://www.angusj.com *
|
5 | 5 | * Copyright : Angus Johnson 2010-2023 *
|
6 | 6 | * Purpose : Core Clipper Library structures and functions *
|
@@ -754,21 +754,32 @@ namespace Clipper2Lib
|
754 | 754 | T bb1miny = CC_MIN(ln2a.y, ln2b.y);
|
755 | 755 | T bb1maxx = CC_MAX(ln2a.x, ln2b.x);
|
756 | 756 | T bb1maxy = CC_MAX(ln2a.y, ln2b.y);
|
757 |
| - T originx = (CC_MIN(bb0maxx, bb1maxx) + CC_MAX(bb0minx, bb1minx)) >> 1; |
758 |
| - T originy = (CC_MIN(bb0maxy, bb1maxy) + CC_MAX(bb0miny, bb1miny)) >> 1; |
759 |
| - double ln0c = (ln1dy * static_cast<double>(ln1a.x - originx)) + |
760 |
| - (ln1dx * static_cast<double>(ln1a.y - originy)); |
761 |
| - double ln1c = (ln2dy * static_cast<double>(ln2a.x - originx)) + |
762 |
| - (ln2dx * static_cast<double>(ln2a.y - originy)); |
763 |
| - double hitx = ((ln1dx * ln1c) - (ln2dx * ln0c)) / det; |
764 |
| - double hity = ((ln2dy * ln0c) - (ln1dy * ln1c)) / det; |
| 757 | + |
765 | 758 | if constexpr (std::numeric_limits<T>::is_integer)
|
766 | 759 | {
|
| 760 | + int64_t originx = (CC_MIN(bb0maxx, bb1maxx) + CC_MAX(bb0minx, bb1minx)) >> 1; |
| 761 | + int64_t originy = (CC_MIN(bb0maxy, bb1maxy) + CC_MAX(bb0miny, bb1miny)) >> 1; |
| 762 | + double ln0c = (ln1dy * static_cast<double>(ln1a.x - originx)) + |
| 763 | + (ln1dx * static_cast<double>(ln1a.y - originy)); |
| 764 | + double ln1c = (ln2dy * static_cast<double>(ln2a.x - originx)) + |
| 765 | + (ln2dx * static_cast<double>(ln2a.y - originy)); |
| 766 | + double hitx = ((ln1dx * ln1c) - (ln2dx * ln0c)) / det; |
| 767 | + double hity = ((ln2dy * ln0c) - (ln1dy * ln1c)) / det; |
| 768 | + |
767 | 769 | ip.x = originx + (T)nearbyint(hitx);
|
768 | 770 | ip.y = originy + (T)nearbyint(hity);
|
769 | 771 | }
|
770 | 772 | else
|
771 | 773 | {
|
| 774 | + double originx = (CC_MIN(bb0maxx, bb1maxx) + CC_MAX(bb0minx, bb1minx)) / 2.0; |
| 775 | + double originy = (CC_MIN(bb0maxy, bb1maxy) + CC_MAX(bb0miny, bb1miny)) / 2.0; |
| 776 | + double ln0c = (ln1dy * static_cast<double>(ln1a.x - originx)) + |
| 777 | + (ln1dx * static_cast<double>(ln1a.y - originy)); |
| 778 | + double ln1c = (ln2dy * static_cast<double>(ln2a.x - originx)) + |
| 779 | + (ln2dx * static_cast<double>(ln2a.y - originy)); |
| 780 | + double hitx = ((ln1dx * ln1c) - (ln2dx * ln0c)) / det; |
| 781 | + double hity = ((ln2dy * ln0c) - (ln1dy * ln1c)) / det; |
| 782 | + |
772 | 783 | ip.x = originx + static_cast<T>(hitx);
|
773 | 784 | ip.y = originy + static_cast<T>(hity);
|
774 | 785 | }
|
|
0 commit comments