找到旋转矩形的中心点

时间:2014-03-25 08:05:14

标签: c# math rectangles centroid

在我的应用程序中,用户在同一行指向两个点PointAPointB(可以是任意角度)。所以我有以下信息

  1. PointA坐标

  2. pointB坐标

  3. PointA与B点之间的距离

  4. 跨越距离(取自用户作为绘制其他点的输入)

  5. 角度(根据pointA和pointB计算)。

  6. 根据此信息,另一个应用程序绘制四个点(矩形顶点)。

    我要做的是,我必须找到这四个点(矩形)的中心点才能正确绘制这4个点之间的矩形。

    现在我能够绘制以中心为中心的矩形,这显然是不正确的。我应该使用什么公式计算矩形的中心,以便绘制有界矩形?

    图片1:

    enter image description here

    图片2:

    enter image description here

    图片3:

    enter image description here

    图片4:

    enter image description here

    图片5:

    enter image description here

    如附图中所示,在每种情况下,矩形都以pointA作为质心绘制。虽然我希望质心位于四点的中心。

    P.S:所有角度均在0度北方测量。

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

如果你有两点 p1,p2 ,你需要从这些点画出一个矩形(得到其他2点 a1,a2 ):

a1.x = p1.x;
a1.y = p2.y;
a2.x = p2.x;
a2.y = p1.y;

你去,四点 p1,a2,p2,a1 (顺时针顺序)描述你的矩形。


更新

var width = p2.x - p1.x;
var height = p2.y - p1.y;
var angle = 0;
var center = new Point(p1.x + width / 2, p1.y + height / 2);

更新

var center = new Point();
var angle = //you have it. Radians.
var height = // you have this as well.
var halfSegment = new Point((p2.x - p1.x) / 2, (p2.y - p1.y) / 2);
center.x = halfSegment.x + Math.Cos(angle - Math.PI / 2) * height / 2;
center.y = halfSegment.y + Math.Sin(angle - Math.PI / 2) * height / 2;

答案 1 :(得分:0)

我想:

令P0 = {x0,y0}且P1 = {x1,y1}

设矢量V01 = P1 - P0 == {V01x = P1x - P0x,V01y = P1y - P0y}

设矢量V03 = {V01x * Cos(PI / 2) - V01y * Sin(PI / 2),V01x * Sin(PI / 2)+ V01y * Cos(PI / 2)

宽度= Sqrt(V03x * V03x + V03y * V03y)

VN = V03 /宽度== {V03x /宽度,V03y /宽度}

P3 = P0 + VN *高度

P4 = P1 + VN *高度

PC =(P0 + P1 + P2 + P3)/ 4