目前我处理以下问题。我正在使用javascript,我不能(也不想)使用任何第三方.js库。
我正在写一个函数,我在输入上有两个标准的转换矩阵--A和B:
var A = [
[a, c, e],
[b, d, f],
[0, 0, 1]
];
var B = [
[a, c, e],
[b, d, f],
[0, 0, 1]
];
和θ值介于或等于0和1.数字a,b,c,d对应于旋转和缩放,e和f等于x和y位置。
我需要在这两个矩阵之间进行插值,我想知道,最好的方法是什么(性能方面),因为这个函数会经常被调用。我已经使用lerp整理了x和y部分。现在我想知道最不强化的方法是什么。这些是我到目前为止找到的选项:
有没有其他方法可能会减少我可以使用的CPU密集度,我错过了?
答案 0 :(得分:0)
如果我看对的话,您将获得2D变换:
Option Explicit
Function IsFileValid(ByVal strFileName As String) As Boolean
Dim wb As Workbook
Application.ScreenUpdating = False
Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & strFileName, True, True)
On Error Resume Next
If Worksheets(wrkshtTracker).ListObjects(tableTracker).Range(1, 2) = strEmailHeader Then
IsFileValid = True
End If
wb.Close False
Set wb = Nothing
On Error GoTo 0
Application.ScreenUpdating = True
End Function
是 X 轴方向向量
(a,b)
是 Y 轴方向向量
(c,d)
是原点位置
因此让我们在从(e,f)
到t
插值的t=<0.0,1.0>
范围内定义标量参数A(a0,b0,...)
。
位置可以直接插值:
B(a1,b1,...)
现在方向矢量的角度为e(t)=e0+(e1-e0)*t
f(t)=f0+(f1-f0)*t
,尺寸为ax,ay
:
sx,sy
因此您可以插值:
ax = atan2(b,a)
ay = atan2(d,c)
sx = sqrt(a^2 + b^2)
sy = sqrt(c^2 + d^2)
然后构造矩阵回:
ax(t)=ax0+(ax1-ax0)*t
ay(t)=ay0+(ay1-ay0)*t
sx(t)=sx0+(sx1-sx0)*t
sy(t)=sy0+(sy1-sy0)*t
这应该可以解决问题...
有关更多信息,请参见: