我有两点积分
(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)
顺便说一下,这些线只能是垂直的或水平的,所以斜率要么是未定义的,要么是零。
答案 0 :(得分:3)
将B
围绕A
旋转90度:
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)
,因为90
度是pi/2
弧度。
编辑:只是为了让你的例子完全明确。要围绕第1点旋转90度,您将得到:
(x1,y1) (x1-(y2-y1),y1+(x2-x1))
要围绕第2点旋转,您将获得:
(x2-(y1-y2),y2+(x1-x2)) (x2,y2)
答案 1 :(得分:-1)
以你所说的为例:
这可以很容易地推广到任何直线,不仅是垂直直线,还有任何旋转角度。