我寫的判斷圓和矩形詳細位置的函式

2021-09-30 08:09:40 字數 1735 閱讀 8682

/*判斷圓與長方形的關係,一共四種關係:圓與長方形不包含也不相交,返回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...