矩阵的变幻(旋转,转置,翻转,对角线,反对角线)

旋转

顺时针旋转90°(逆时针旋转270°)
点击查看代码
void  rotate_90(){		//所有矩阵适用
	swap(n,m);	//注意行列已互换
	for(int i = 1; i <= n; i ++ ){	
		for(int j = 1; j <= m; j ++ ){
			b[i][j] = a[m+1-j][i];	//注意m与j匹配
		}
	}
	for(int i = 1; i <= n; i ++ ){	//粘贴到原矩阵
		for(int j = 1; j <= m; j ++ ){
			a[i][j] = b[i][j];	
		}
	}
}

(123456789)  > (741852963)

(123456789101112131415)  > (116112721383149415105)

旋转180°(顺逆一致)
点击查看代码
void rotate_180(){
	for(int i = 1; i <= n; i ++ ){	//行列不互换
		for(int j = 1; j <= m; j ++ ){
			b[i][j] = a[n+1-i][m+1-j];	//注意n与i匹配,m与j匹配
		}
	}
	for(int i = 1; i <= n; i ++ ){	//粘贴到原矩阵
		for(int j = 1; j <= m; j ++ ){
			a[i][j] = b[i][j];	
		}
	}
}

(123456789)  > (987654321)

(123456789101112131415)  > (151413121110987654321)

顺时针旋转270°(逆时针旋转90°)
点击查看代码
void rotate_270(){
	swap(n,m);	//注意行列已互换
	for(int i = 1; i <= n; i ++ ){
		for(int j = 1; j <= m; j ++ ){
			b[i][j] = a[j][n+1-i];	//n-i
		}
	}
	for(int i = 1; i <= n; i ++ ){		//粘贴到原矩阵
		for(int j = 1; j <= m; j ++ ){
			a[i][j] = b[i][j];	
		}
	}
}

(123456789)  > (369258147)

(123456789101112131415)  > (510154914381327121611)

转置

点击查看代码
void  transpose(){		
	swap(n,m);	//行列互换
	for(int i = 1; i <= n; i ++ ){	
		for(int j = 1; j <= m; j ++ ){
			b[i][j] = a[j][i];	
		}
	}
	for(int i = 1; i <= n; i ++ ){	
		for(int j = 1; j <= m; j ++ ){
			a[i][j] = b[i][j];	
		}
	}
}

(123456789)  > (147258369)

(123456789101112131415)  > (161127123813491451016)

翻转

上下翻转
点击查看代码
void flip_up_down(){
	for(int i = 1; i <= n; i ++ ){		
		for(int j = 1; j <= m; j ++ ){
			b[i][j] = a[n+1-i][j];
		}
	}
	for(int i = 1; i <= n; i ++ ){		
		for(int j = 1; j <= m; j ++ ){
			a[i][j] = b[i][j];
		}
	}
}

(123456789)  > (789456123)

(123456789101112131415)  > (111213141567891012345)

左右翻转
点击查看代码
void flip_left_right(){
	for(int i = 1; i <= n; i ++ ){		
		for(int j = 1; j <= m; j ++ ){
			b[i][j] = a[i][m+1-j];
		}
	}
	for(int i = 1; i <= n; i ++ ){		
		for(int j = 1; j <= m; j ++ ){
			a[i][j] = b[i][j];
		}
	}
}

(123456789)  > (321654987)

(123456789101112131415)  > (543211098761514131211)

对角线翻转【相当于方阵的转置】

注意:只有方阵才有对角线

点击查看代码
void flip_diagonal(){
	for(int i = 1; i <= n; i ++ ){		
		for(int j = 1; j <= n; j ++ ){
			b[i][j] = a[j][i];
		}
	}
	for(int i = 1; i <= n; i ++ ){		
		for(int j = 1; j <= n; j ++ ){
			a[i][j] = b[i][j];
		}
	}
}

(123456789)  > (147258369)

反对角线翻转
点击查看代码
void flip_opp_diagonal(){
	for(int i = 1; i <= n; i ++ ){		
		for(int j = 1; j <= n; j ++ ){
			b[i][j] = a[n+1-j][n+1-i];
		}
	}
	for(int i = 1; i <= n; i ++ ){		
		for(int j = 1; j <= n; j ++ ){
			a[i][j] = b[i][j];
		}
	}
}

(123456789)  > (963852741)

posted @   Keith-  阅读(629)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示