限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410
第一次发公众号文章就是发这题的题解,现在我想通过新学的线性代数知识来解决这一道题。关于矩阵的更基础的知识在前面发的文章有交待:
首先要理解线性变换是什么意思,线性变换定义如下:
懵不懵?反正我是懵的,再换一个说法也许大家都能懂。
如果一个变换同时具有以下 2 条性质,则它是一个线性变换。
1)变换前后,所有的直线仍然是直线。
2)变换前后,原点保持不变。
常见的矩阵变换还有如下几种:
旋转变换
想把一个图形逆时针方向旋转角度θ变换矩阵,可以在前面乘上如下矩阵:
于是就可以得到如下效果:
伸缩变换
想把一个图形拉伸k倍变换矩阵,可以在前面乘上如下矩阵:
于是就可以得到如下效果:
翻转变换
前面分别乘以如下两个矩阵:
实现的效果就是把图片关于x轴翻转,以及关于y轴翻转:
剪切变换
剪切变换就是把一张图片斜着拉伸,比如下面这个效果:
当然还可以对图像进行多次变换,比如本题打印方阵的线性变换如下:
很容易看出变换后矩阵较前矩阵旋转了-45度并拉伸2分之根号2倍,那就依次地在前边乘以相对应的矩阵:
也可通过转换前后的两已知的点求得线性转换的矩阵,比如题中7所在的位置(-3,3)点旋转后的新位置是(0,3)点。
根据矩阵乘法得方程组:
-3x-3y=0 ①
-3y+3x=3 ②
解方程组得:x=1/2 y=-1/2;
代入矩阵得:
以上计算可在草稿纸上完成,剩下的才是代码了,很显然这只是众多思路之一,纯粹应用一下新学的数学知识而已,好在代码也不复杂。
#
using std;
long n, a[1010][1010], x, y, t, k;
int main() {
cin >> n;
x = -1; //行最开始为-1
for(int i = 1; i
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410