簡陽網(wǎng)站建設(shè)舉出最新的網(wǎng)絡(luò)營銷的案例
仿射變換是圖形學(xué)中經(jīng)常用到的方法,通常但是仿射變換的系數(shù)是未知的,需要找到變換前后的三對對應(yīng)點(diǎn)進(jìn)行求解。
from affine import Affine
import numpy as np
參考文獻(xiàn)
矩陣最小二乘法求解仿射變換矩陣
def solve_affine(init_points, goal_points) -> Affine:# 分別整理成上面分析的6x6和6x1的矩陣# 先定義變量保留6個(gè)坐標(biāo)的值(ax, ay), (bx, by), (cx, cy) = init_points(ax1, ay1), (bx1, by1), (cx1, cy1) = goal_pointsA = np.array([[ax, ay, 1, 0, 0, 0],[0, 0, 0, ax, ay, 1],[bx, by, 1, 0, 0, 0],[0, 0, 0, bx, by, 1],[cx, cy, 1, 0, 0, 0],[0, 0, 0, cx, cy, 1]])B = np.array([ax1, ay1, bx1, by1, cx1, cy1]).reshape(6, 1) # 比手寫6X1矩陣要省事M = np.linalg.inv(A.T @ A) @ A.T @ B # 套公式M=M.flatten().tolist()return Affine(*M) #轉(zhuǎn)換成Affine對象
A = [[0,0], [50, 0], [50, 50]]
B = [[30, 30], [130, 30], [130, 130]]transform=solve_affine(A,B)for a,b in zip(A,B):print(a,b,transform*a)