兩圓求交點

來源:互聯網
上載者:User
/*求圓(x1,y1,R)和圓(x2,y2,r)的交點數組p存放圓心(1~n-1)和交點(n~),數組radius存放半徑 count 用於記錄交點數(包括圓心的數目) */for(int i=0; i<n; i++){    // 初始化     double x1, y1, R;    x1 = p[i].x, y1 = p[i].y,R = radius[i];     double x2, y2, r;    x2 = p[j].x, y2 = p[j].y,r = radius[j];                                        double d = dist(x1,y1,x2,y2);//求兩圓圓心距     if(d > R+r || d < f(R-r)) continue;//兩圓相離時                                           if(x1 == x2 && y1 == y2) continue;//同心圓     else if(y1 == y2 && x1 != x2)    {         double a = ((R*R-r*r)-(x1*x1-x2*x2))/(2*x2-2*x1);         if(d == f(R-r) || d == R+r)//只有一個交點時               p[count].x = a, p[count].y = y1,count ++;              else//兩個交點               {                   double t = R*R-(a-x1)*(a-x1);                   p[count].x = a, p[count].y = y1+sqrt(t),count ++;                   p[count].x = a, p[count].y = y1-sqrt(t),count ++;               }                                                                                    }    else if(y1 != y2)    {        double k ,disp;        k = (2*x1-2*x2)/(2*y2-2*y1);        disp = ((R*R-r*r)-(x1*x1-x2*x2)-(y1*y1-y2*y2))/(2*y2-2*y1);//直線位移量         double a, b, c;        a = (k*k+1);        b = (2*(disp-y1)*k-2*x1);        c = (disp-y1)*(disp-y1)-R*R+x1*x1;        double disc;        disc = b*b-4*a*c;//一元二次方程判別式         if(d == f(R-r) || d == R+r)                                              {            p[count].x = (-b)/(2*a),p[count].y = k*p[count].x + disp,count++;        }        else        {            p[count].x = ((-b)+sqrt(disc))/(2*a),p[count].y = k*p[count].x + disp,count++;            p[count].x = ((-b)-sqrt(disc))/(2*a),p[count].y = k*p[count].x + disp,count++;        }    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.