Oval collision detection not working properly

后端 未结 4 1944
逝去的感伤
逝去的感伤 2021-01-24 01:54

So I\'m trying to implement a test where a oval can connect with a circle, but it\'s not working.

edist = (float) Math.sqrt(
    Math.pow((px + ((pwidth/2) )) -          


        
4条回答
  •  南笙
    南笙 (楼主)
    2021-01-24 02:19

    If you can find your foci you can check for collision with the pseudo code below. WARNING this only works for two ellipse collisions (ellipse and circle collisions work also).

    r = length of semi major axis
    a_x = x coordinate of foci 1 of the first ellipse
    a_y = y coordinate of foci 1 of the first ellipse
    b_x = x coordinate of foci 2 of the first ellipse
    b_y = y coordinate of foci 2 of the first ellipse
    
    c_x = x coordinate of foci 1 of the second ellipse
    c_y = y coordinate of foci 1 of the second ellipse
    d_x = x coordinate of foci 2 of the second ellipse
    d_y = y coordinate of foci 2 of the second ellipse
    
    p_x = (a_x+b_x+c_x+d_x)/4 // i.e. the average of the foci x values
    p_y = (a_y+b_y+c_y+d_y)/4 // i.e. the average of the foci y values
    
    if r >= ( sqrt( (p_x + a_x)^2+(p_y + a_y)^2 ) + sqrt( (p_x + a_x)^2+(p_y + a_y)^2 ) )
    then collision
    

    If you really want the derivation of this let me know and I'll provide it. But it uses the idea that the sum of the distances between the foci of an ellipse and any point on the edge of an ellipse are a set distance apart (the semi major axis). And solves for a point that is on the edge of both ellipsoids and if one exist then their is a collision.

提交回复
热议问题