我有4个点,点 A (x1,y1),点 B (x2,y1),点 C (x2 ,y2),点 D (x2,y3)创建两个比例:Scale1 yRange( B , D ),Scale2 yRange( B,C )。
我只想缩放y轴,以便将 D 点缩小到 C 点,以便 CAB 之间的角度是一定程度的。然后我想在一定程度上围绕点 B 旋转缩放点 C ,获得点 E 。然后我想在原始点 D 所在的未缩放坐标网格上找到点 E 的实际值。我想我需要使用仿射变换,但所有示例都先旋转,然后进行缩放。但我需要先缩放,然后旋转。我如何找到这个新值?我知道如何单独进行旋转和单独进行缩放,但不能一起进行。
也许我感到困惑,在执行缩放和旋转之后,我不需要缩减,因为 E 的新值等于 F ?我知道有很多例子,但我无法解决这个问题......
这是我的目标。我有3分 A , B 和 D 。我想缩放,以便 DAB 等于让我们说60度,创建点 C ,然后在缩放网格内的 C 上执行几个点旋转。我最终希望找到 F 的值,以及其他旋转点,它位于原始未缩放网格内的几何位置,除非我将3个原始点首先缩放到所述度数,否则我无法计算。缩放网格包含我需要的正确比例以旋转我的点。我需要在缩放网格中进行所有旋转,不会丢失值,而是改变宽高比,然后在缩放网格中取出这些新点并在未缩放网格中绘制它们,这将失去正确的宽高比,这很好
在python中编码。
答案 0 :(得分:0)
这是我认为你想要的Python3程序:
import math
# Use a negative angle since we're rotating clockwise
rotate_C_angle = math.radians(-60)
A = [0, 0]
B = [100, 0]
D = [100, 250]
# Create point D such that angle CAB = target_angle_CAB
target_angle_CAB = math.radians(60)
C = [B[0], B[0] * math.tan(target_angle_CAB)]
# What do we scale B by in order to get C
scale_factor = C[1] / D[1]
# Rotate C around B by rotate_C_angle
# (translate C by -Bx, then rotate, then translate back)
E = [
C[0] - C[1] * math.sin(rotate_C_angle),
C[1] * math.cos(rotate_C_angle)
]
# Scale E back
F = [E[0], E[1] / scale_factor]
这假设A在原点。如果不是那么从所有x坐标中减去Ax,从y坐标减去Ay,那么在再次翻译之前进行计算。
是否需要缩减E到F取决于您正在做什么。这里发生的事情假设沿y的缩放变换不会旋转。