Find corners of a rotated rectangle given its center point and rotation

后端 未结 3 1351
误落风尘
误落风尘 2021-01-15 08:12

Can someone give me an algorithm that finds the position of all four corners of a rectangle if I know its center point(in global coordinate space), width and height, and its

3条回答
  •  独厮守ぢ
    2021-01-15 08:59

    The coordinates of each vertices:

     Center point = (center.x, center.y)
     Angle        = angle
     Height       = height
     Width        = width      
    
    
    
    TOP RIGHT VERTEX:
    Top_Right.x = center.x + ((width / 2) * cos(angle)) - ((height / 2) * sin(angle))
    Top_Right.y = center.y + ((width / 2) * sin(angle)) + ((height / 2) * cos(angle))
    
    
    
    TOP LEFT VERTEX:
    Top_Left.x = center.x - ((width / 2) * cos(angle)) - ((height / 2) * sin(angle))
    Top_Left.y = center.y - ((width / 2) * sin(angle)) + ((height / 2) * cos(angle))
    
    
    
    BOTTOM LEFT VERTEX:
    Bot_Left.x = center.x - ((width / 2) * cos(angle)) + ((height / 2) * sin(angle))
    Bot_Left.y = center.y - ((width / 2) * sin(angle)) - ((height / 2) * cos(angle))
    
    
    
    BOTTOM RIGHT VERTEX:
    Bot_Right.x = center.x + ((width / 2) * cos(angle)) + ((height / 2) * sin(angle))
    Bot_Right.y = center.y + ((width / 2) * sin(angle)) - ((height / 2) * cos(angle))
    

    This algorithm is a compressed version of these 3 steps:

    Step 1: Center your rectangle around the origin

    Step 2: Apply the rotation matrix to each vertex

    Step 3: Move the rotated rectangle to the correct position, by adding the center point to each coordinate

    This is explained in more depth here https://math.stackexchange.com/questions/126967/rotating-a-rectangle-via-a-rotation-matrix

提交回复
热议问题