C 判斷乙個球體和矩形最短距離

2021-10-14 14:30:57 字數 2703 閱讀 5780

主要判斷球體和矩形邊沿最短舉例,

申明類:

/// 

/// 球的資訊

///

public

class

ball

set}

///

/// 位置

///

public

point addr

set}

///

/// 執行方向

///

public

point dir

set}

///

/// 速度

///

public

point speed

set}

}///

///矩形的資訊

///

public

class

rect

set}

///

/// 高

///

public

int height

set}

///

/// 狀態 0不存在 1 需要敲擊一次才能消除 2 需要敲擊2次才能小區 99:不能消除

///

public

int stat

set}

///

/// 位址

///

public

point addr

set}

}

計算距離

/// 

/// 獲取距離最近的點

///

///

private

double

check_leng

(rect p,

ball b)

else

else

if(b.addr.y >= p.addr.y + p.height /

2+ b.radius)

//圓心位於的上邊沿

else

//圓心位於矩形內

return min_y;

}elseif(

(b.addr.y >= p.addr.y - p.height /

2+ b.radius)

&&(b.addr.y <= p.addr.y + p.height /

2- b.radius)

)//位於矩形x軸方向區域類

else

if(b.addr.x >= p.addr.x + p.width /

2+ b.radius)

//圓心位於矩形的右邊沿

else

//圓心位於矩形內

return min_x;

}elseif(

(b.addr.x <= p.addr.x - p.width /

2+ b.radius)

&&(b.addr.y <= p.addr.y - p.height /

2+ b.radius)

)//第四象域

else

if(b.addr.y > n)

if(min_4 !=-1

)else}}

else

else}}

return min_4;

}elseif(

(b.addr.x > p.addr.x + p.width /

2- b.radius)

&&(b.addr.y <= p.addr.y - p.height /

2+b.radius)

)//第三象域

else

if(b.addr.y > n)

//double mint_t = math.sqrt(math.pow(p.addr.x + p.width / 2 - x, 2) + math.pow(p.addr.y - p.height / 2 - y, 2));

if(min_3 !=-1

)else

if(mint_t < min_3)

}else

else

min_3 = mint_t;}}

return min_3;

}elseif(

(b.addr.x > p.addr.x + p.width /

2- b.radius)

&&(b.addr.y > p.addr.y + p.height /

2- b.radius)

)//第二象域

else

if(b.addr.y < n)

if(min_2 !=-1

)else}}

else

else}}

return min_2;

}elseif(

(b.addr.x <= p.addr.x - p.width /

2+ b.radius)

&&(b.addr.y > p.addr.y + p.height /

2- b.radius)

)//第一象域

else

if(b.addr.y < n)

if(min_1 !=-1

)else}}

else

else}}

return min_1;

}return-98

;}}

如何判斷乙個點在矩形內

最近在做遊戲伺服器中技能模組,往往要掃瞄乙個區域,判斷npc是不是在我這個區域內,在的話就發傷害。就需要實現一下,對於乙個點是否在矩形內的判斷。只需要判斷該點是否在上下兩條邊和左右兩條邊之間就行,判斷乙個點是否在兩條線段之間夾著,就轉化成,判斷乙個點是否在某條線段的一邊上,就可以利用叉乘的方向性,來...

使用OpenGL動態管線和C 完成乙個球體

終於寫出乙個球體,索引陣列還是有一些bug,太累了,過幾天再調然後添紋理吧。網上的球沒有乙個能用 不是固定管線就是 出錯要不就是不完整 這個 拷貝下來可以直接用。加油吧少年,前路遙遙人生有期。額。部落格之前所有專案都是空專案。球體實現了旋轉。效果截圖 glint statcky 60 橫向向切成多少...

關於判斷乙個矩形能否容下兩個圓

給定兩個圓和乙個矩形,判斷兩個圓能否放入矩形內。其中,a,b,r1,r2都是浮點數。考慮兩個圓能夠放入的乙個最基本的必要條件是 半徑大的圓放進去後,半徑小的圓還可以放進去。也就是滿足 min a,b max r1,r2 2 接下來就分析能否放入的臨界點,設想右側短邊是乙個可以滑動的擋板,從右向左滑動...