1779{
1780 int seg_size;
1781 double dist_sqr, shortest_sqr;
1785
1786 if (radius_A == radius_B)
1787 {
1788
1791 {
1796 }
1798 {
1803 }
1804
1807 {
1812 }
1814 {
1819 }
1820 }
1821 else
1822 {
1823
1825
1826
1827 proj.
x = CENTER->
x + (B1->
x - CENTER->
x) * radius_A / radius_B;
1828 proj.
y = CENTER->
y + (B1->
y - CENTER->
y) * radius_A / radius_B;
1829
1831 {
1834 dl->
distance = fabs(radius_A - radius_B);
1836 }
1837
1838 proj.
x = CENTER->
x + (B3->
x - CENTER->
x) * radius_A / radius_B;
1839 proj.
y = CENTER->
y + (B3->
y - CENTER->
y) * radius_A / radius_B;
1841 {
1844 dl->
distance = fabs(radius_A - radius_B);
1846 }
1847
1848
1850
1851
1852 proj.
x = CENTER->
x + (A1->
x - CENTER->
x) * radius_B / radius_A;
1853 proj.
y = CENTER->
y + (A1->
y - CENTER->
y) * radius_B / radius_A;
1855 {
1858 dl->
distance = fabs(radius_A - radius_B);
1860 }
1861
1862
1863 proj.
x = CENTER->
x + (A3->
x - CENTER->
x) * radius_B / radius_A;
1864 proj.
y = CENTER->
y + (A3->
y - CENTER->
y) * radius_B / radius_A;
1866 {
1869 dl->
distance = fabs(radius_A - radius_B);
1871 }
1872 }
1873
1874
1876 P1 = A1;
1877 P2 = B1;
1878
1880 if (dist_sqr < shortest_sqr)
1881 {
1882 shortest_sqr = dist_sqr;
1883 P1 = A1;
1884 P2 = B3;
1885 }
1886
1888 if (dist_sqr < shortest_sqr)
1889 {
1890 shortest_sqr = dist_sqr;
1891 P1 = A3;
1892 P2 = B1;
1893 }
1894
1896 if (dist_sqr < shortest_sqr)
1897 {
1898 shortest_sqr = dist_sqr;
1899 P1 = A3;
1900 P2 = B3;
1901 }
1902
1906
1908}
#define LW_TRUE
Return types for functions with status returns.
int lw_segment_side(const POINT2D *p1, const POINT2D *p2, const POINT2D *q)
lw_segment_side()
static double distance2d_sqr_pt_pt(const POINT2D *p1, const POINT2D *p2)