线性变换 - np实现

This commit is contained in:
2025-07-10 16:18:53 +08:00
parent 3fffa6d497
commit 1f1d6c700d

View File

@ -1,7 +1,6 @@
import math import math
def linear_trans(arr,x): def linear_trans(arr,x):
return [x[0]*arr[0][0]+x[1]*arr[0][1], x[0]*arr[1][0]+x[1]*arr[1][1]]
return [sum(map(lambda x: x[0]*x[1],zip(line,x))) for line in arr] return [sum(map(lambda x: x[0]*x[1],zip(line,x))) for line in arr]
@ -29,4 +28,17 @@ def rotate_line(line,p,dgr):
return [rk,rp1[1]-rk*rp1[0]] return [rk,rp1[1]-rk*rp1[0]]
print(rotate_line((3,4),(2,1),math.pi/4)) import numpy as np
def rotate_line_np(line,p:np.ndarray,dgr) -> np.ndarray:
k,b = line
arr = np.array([[np.cos(dgr),-np.sin(dgr)],[np.sin(dgr),np.cos(dgr)]])
vec = np.dot(arr,[1,k])
rk = vec[1]/vec[0]
p1 = np.array([0,b])
rp = np.dot(arr, p1-p) + p
return np.array([rk,rp[1]-rk*rp[0]])
print(rotate_line((3,4),(2,1),math.pi/4))
print(rotate_line_np((3,4),np.array([2,1]),math.pi/4))