给定一个点P=(2,1), 将该点绕原点先逆时针旋转45◦,再平移(1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算)。
主要矩阵
FMatrix2x2
FMatrix 矩阵说明
以行向量作为计算习惯,所以计算的时候矩阵注意取转置
蓝图
C++
void AActor_Pa0::BeginPlay()
{
Super::BeginPlay();// 给定一个点P=(2,1), 将该点绕原点先逆时针旋转45◦,再平移(1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算)。
float fcos = UKismetMathLibrary::DegCos(45);
float fsin = UKismetMathLibrary::DegSin(45);
FPlane row1 = FPlane(fcos, -fsin, 1, 0);
FPlane row2 = FPlane(fsin, fcos, 2, 0);
FPlane row3 = FPlane(0, -0, 1, 0);
FPlane row4 = FPlane(0, -0, 0, 0);
FMatrix matrix = FMatrix(row1, row2, row3, row4);
FVector4 originPos = FVector4(2, 1, 1, 0);
matrix = matrix.GetTransposed(); //行向量乘以矩阵,所以矩阵取转置
FVector4 res = matrix.TransformFVector4(originPos);
UE_LOG(LogTemp, Warning, TEXT("%s"), *matrix.ToString());
UE_LOG(LogTemp, Warning, TEXT("[ %f, %f, %f ]"), res.X, res.Y, res.Z);
}
output:
LogTemp: Warning: [0.707107 0.707107 0 0] [-0.707107 0.707107 0 0] [1 2 1 0] [0 0 0 0]
LogTemp: Warning: [ 1.707107, 4.121320, 1.000000 ]
手机扫一扫
移动阅读更方便
你可能感兴趣的文章