/*判斷圓與長方形的關係,一共四種關係:圓與長方形不包含也不相交,返回1;相交返回2 ; 圓在長方形內部返回3;長方形在圓內部返回4*/
//假定矩形由d1,d2,d3,d4頂點按順時針方向組成,ywz為圓心位置,yzj為圓直徑。
int y_zfx_wz(d3dxvector2 &ywz,float &yzj,d3dxvector2 &d1,d3dxvector2 &d2,d3dxvector2 &d3,d3dxvector2 &d4)
k=4*pow((d3.x-d2.x)*(d3.x-ywz.x)+(d3.y-d2.y)*(d3.y-ywz.y),2)-4*(pow(d3.x-d2.x,2)+pow(d3.y-d2.y,2))*(pow(d2.x-ywz.x,2)+pow(d2.y-ywz.y,2)-pow(yzj,2));
//如果有在d3-d2確定的直線上有交點
if (k>0)
k=4*pow((d4.x-d3.x)*(d4.x-ywz.x)+(d4.y-d3.y)*(d4.y-ywz.y),2)-4*(pow(d4.x-d3.x,2)+pow(d4.y-d3.y,2))*(pow(d3.x-ywz.x,2)+pow(d3.y-ywz.y,2)-pow(yzj,2));
//如果有在d4-d3確定的直線上有交點
if (k>0)
k=4*pow((d1.x-d4.x)*(d1.x-ywz.x)+(d1.y-d4.y)*(d1.y-ywz.y),2)-4*(pow(d1.x-d4.x,2)+pow(d1.y-d4.y,2))*(pow(d4.x-ywz.x,2)+pow(d4.y-ywz.y,2)-pow(yzj,2));
//如果有在d1-d4確定的直線上有交點
if (k>0)
/* 2、計算圓心點與四邊線段的距離,根據正負距離判斷*/
d3dxvector2 ls;
float z,l1,l2,l3,l4;//l1,l2,l3,l4為記錄圓心點與四邊的距離,在邊法向量正側為正,反之為負
ls=d2-d1;
z=ls.x;ls.x=ls.y;ls.y=-z;
d3dxvec2normalize(&ls,&ls);//第乙個邊的法向量
l1= ls.x*(ywz.x-d1.x)+ls.y*(ywz.y-d1.y); //圓心與d2-d1邊的距離
l2= ls.y*(ywz.x-d2.x)-ls.x*(ywz.y-d2.y); //圓心與d3-d2邊的距離
l3= -ls.x*(ywz.x-d3.x)-ls.y*(ywz.y-d3.y); // 圓心與d4-d3邊的距離
l4= -ls.y*(ywz.x-d4.x)+ls.x*(ywz.y-d4.y); //圓心與d1-d4邊的距離
if ((l1>=yzj)&&(l2>=yzj)&&(l3>=yzj)&&(l4>=yzj))
return 3; //圓在長方形內部,也就是長方形包含圓
//3、如果矩形四個頂點都在圓內,則返回4
if ((pow(d1.x-ywz.x,2)+pow(d1.y-ywz.y,2)<=yzj*yzj)&&(pow(d2.x-ywz.x,2)+pow(d2.y-ywz.y,2)<=yzj*yzj)&&(pow(d3.x-ywz.x,2)+pow(d3.y-ywz.y,2)<=yzj*yzj)&&(pow(d4.x-ywz.x,2)+pow(d4.y-ywz.y,2)<=yzj*yzj))
return 4;
//4、必定剩餘第一種情況,圓與正方形不相交,也不包含
return 1;
}
python藍色的圓 Python 矩形和圓形
exercise 15.1.定義乙個叫做circle 類,類的屬性是圓心 center 和半徑 radius 其中,圓心 center 是乙個 point 類,而半徑 radius 是乙個數字。例項化乙個圓心 center 為 150,100 半徑 radius 為 75 的circle 物件。1 ...
c 實現判斷點與圓的位置關係
question c 實現判斷點與圓的位置關係 1 點在圓上 2 點在圓內 3 點在圓外 c 實現 include using namespace std 判斷點和圓的位置關係 點類 class point int getx void sety int y int gety private int ...
c 判斷點與圓 矩形 多邊形的關係
c 中並未提供型別gis的空間結構,把點 圓 矩形 多邊形等封裝在一起,但是基本的空間位置關係還是可以判斷的 判斷點與矩形 圓及多邊形的位置關係 public class pointhelper public static boolean pointincircle point p,point ci...