Created
March 27, 2022 15:53
-
-
Save lightjiao/570827f0067ceb27cd148114f760bb1e to your computer and use it in GitHub Desktop.
2D胶囊体与2D圆是否相交,算法来源于《游戏开发中的数学与物理》一书
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <summary> | |
/// 2D胶囊体与2D圆是否相交 | |
/// </summary> | |
/// <param name="capsulePoint">胶囊体的圆心</param> | |
/// <param name="capsuleDir">胶囊体的向量</param> | |
/// <param name="capsuleRadius">胶囊体的半径</param> | |
/// <param name="circlePoint">圆心的位置</param> | |
/// <param name="circleRadius">圆的半径</param> | |
/// <returns></returns> | |
private static bool CapsuleAndCircleCheckHit(Vector2 capsulePoint, Vector2 capsuleDir, float capsuleRadius, Vector2 circlePoint, float circleRadius) | |
{ | |
var dx = circlePoint.x - capsulePoint.x; | |
var dy = circlePoint.y - capsulePoint.y; | |
var t = (capsuleDir.x * dx + capsuleDir.y * dy) / | |
(capsuleDir.x * capsuleDir.x + capsuleDir.y * capsuleDir.y); | |
t = Mathf.Clamp01(t); | |
var mx = capsuleDir.x * t + capsulePoint.x; | |
var my = capsuleDir.y * t + capsulePoint.y; | |
var disSqrt = (mx - circlePoint.x) * (mx - circlePoint.x) + | |
(my - circlePoint.y) * (my - circlePoint.y); | |
var radiusSum = capsuleRadius + circleRadius; | |
if (disSqrt <= radiusSum * radiusSum) | |
{ | |
return true; | |
} | |
return false; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment