1

私は2点の線を持っています

(x1, y1) (x2, y2)

私はx +、y +平面のみに取り組んでいます

この線は垂直だと言う

(320, 320) (320, 160)

90度回転させて取得するにはどうすればよいですか

(320, 320) (480, 320)  [90 deg rotated by bottom point (320, 320)]
(320, 160) (480, 160)  [90 deg rotated by top point (320, 160)]

同じ形式で必要になることを覚えておいてください。つまり、

(x1, y1) (x2, y2)

ちなみに、これらの線は垂直または水平しかできないため、勾配は定義されていないかゼロです。

4

2 に答える 2

3

Bを中心に90 度回転するにはA:

diff = B-A
B_new = A + array([-diff[1],diff[0]])

より一般的には、次のようにします。

def rot_origin(p, ang):
    return array([p[0]*cos(ang)-p[1]*sin(ang),p[0]*sin(ang)+p[1]*cos(ang)])

def rot_around(p, p0, ang):
    return p0 + rot_origin(p-p0, ang)

次に、度はラジアンであるB_new = rot_around(A, B, pi/2)ため、ケースは になります。90pi/2

編集:あなたの例を完全に明示するためだけに。点 1 を中心に 90 度回転するには、次のようになります。

(x1,y1) (x1-(y2-y1),y1+(x2-x1))

ポイント 2 を中心に回転するには、次のようになります。

(x2-(y1-y2),y2+(x1-x2)) (x2,y2)
于 2013-02-26T10:28:58.117 に答える
-1

例として挙げたものを取得するには:

  1. 上点と下点の間の距離を取得します。あなたの例では、d = sqrt((x2 - x1)^2 + (y2-y1)^2) です。
  2. 底点による 90 度回転の場合は、単純に (x2,y2) と (x2+d, y2) を端点として使用します。
  3. 頂点による 90 度回転の場合は、単純に (x1,y1) と (x1+d, y1) を終点として使用します。

これは、垂直線だけでなく、任意の回転角度に簡単に一般化できます。

于 2013-02-26T10:39:51.073 に答える