我想将点坐标转换为新生成的坐标系,原始系统从图像的左上角开始(0,0)
我在新系统中的信息是: 1- 我在图像中的某些位置有新原始 (x0,y0) 的值 2- 我在两个新轴上也有 2 个点(总共 4 个点 2 in每条线)使用它我可以计算两条轴的线方程(y = a1x + b1),(y = a2x + b2)3-我有每条线的向量(Vx,Vy)
注意:有时新轴会旋转(线条不完全水平或垂直)
如何将点坐标转换为这个新系统
任何帮助将不胜感激
这是图像
我想将点坐标转换为新生成的坐标系,原始系统从图像的左上角开始(0,0)
我在新系统中的信息是: 1- 我在图像中的某些位置有新原始 (x0,y0) 的值 2- 我在两个新轴上也有 2 个点(总共 4 个点 2 in每条线)使用它我可以计算两条轴的线方程(y = a1x + b1),(y = a2x + b2)3-我有每条线的向量(Vx,Vy)
注意:有时新轴会旋转(线条不完全水平或垂直)
如何将点坐标转换为这个新系统
任何帮助将不胜感激
这是图像
首先表达你的线条a1*(x-x0)+b1*(y-y0)=0
和a2*(x-x0)+b2*(y-y0)=0
它们的交点x0
,y0
已经在方程中占了。
更新的标志
x
从,y
到z
,的变换w
是
z = -sqrt(a1^2+b1^2)*(a2*(x-x0)+b2*(y-y0))/(a2*b1-a1*b2) w = sqrt(a2^2+b2^2)*(a1*(x-x0)+b1*(y-y0))/(a1*b2-a2*b1)
和相反的
x = x0 - b1*z/sqrt(a1^2+b1^2) + b2*w/sqrt(a2^2+b2^2) y = y0 + a1*z/sqrt(a1^2+b1^2) - a2*w/sqrt(a2^2+b2^2)
将系数缩放为sqrt(a1^2+b1^2)=1
和会很有帮助sqrt(a2^2+b2^2)=1
。
请注意,这也适用于非正交线。只要它们不平行,a2*b1-a1*b2!=0
它就会起作用。
例子
z
线 (-2)*(x-3) + (1)*(y-1) = 0
和w
线在(-1)*(x-3) + (-4)*(y-1) = 0
处相遇(3,1)
。因此,系数为a1=-2
, b1=1
, a2=-1
, b2=-4
。
坐标(x,y)=(2,1)
变换为
z = -sqrt((-2)^2+1^2) ((-1) (x-3)+(-4) (y-1))/((-1) 1-(-2) (-4)) = 0.2484
w = sqrt((-1)^2+(-4)^2) ((-2) (x-3)+1 (y-1))/((-2) (-4)-(-1) 1) = 0.9162
与逆
x = -1 z/sqrt((-2)^2+1^2)+(-4) w/sqrt((-1)^2+(-4)^2)+3 = 2
y = (-2) z/sqrt((-2)^2+1^2)-(-1) w/sqrt((-1)^2+(-4)^2)+1 = 1
发展
对于一条线a1*(x-x0)+b1*(y-y0)=0
,沿该线的方向矢量为e1 = [e1x,e1y]= [-b1/sqrt(a1^2+b1^2),a1/sqrt(a1^2+b1^2)]
。另一条线也是如此。
本地点的屏幕坐标[z,w]
是从原点开始x0
,沿着第一条线y0
移动z
,然后w
沿着第二条线移动。所以
x = x0 + e1x*z + e2x*w = x0 -b1/sqrt(a1^2+b1^2)*z - b2/sqrt(a2^2+b2^2)*w
y = y0 + e1y*z + e2y*w = y0 +a1/sqrt(a1^2+b1^2)*z + a2/sqrt(a2^2+b2^2)*w
现在我需要通过反转w
.
要找到z
,w
从x
,y
反转上述两个方程。