Java 超详细带你掌握矩阵的运算

目录
  • 1.物体的坐标变换
    • 1.1平移:
    • 1.2缩放:
    • 1.3旋转:
    • 1.4矩阵乘法
  • 2.java实现矩阵的相关运算
    • 2.1创建矩阵:
    • 2.2矩阵加法:
    • 2.3矩阵减法:
    • 2.4矩阵乘法:
    • 2.5矩阵的转置
    • 2.6矩阵和数字相乘
    • 2.7矩阵的输出

在我们计算机江湖中一直流传着这样一句话:矩阵是无所不能的。我们在荧幕中所看到的二维三维图形的移动变换,放大缩小,任由我们的“摆布”,可是你知道这些变换是如何在计算机中实现的吗?在这一章耀杨带着兄弟萌初步了解这无所不能的矩阵,也为了破掉这层矩阵找到佳慧!!!

1.物体的坐标变换

咱们直接进入正题,计算机中我们锁看到的物体移动无疑例外设计到坐标变换,平移,旋转,缩放这些都伴随着坐标的变换。

计算机会根据物体在计算机中的位置以及我们的位置分别对物体的各个定点进行一系列的坐标运算,最后投影到屏幕上被我们所看到二维图像。

计算机中的图形不可能想现实中可以用“力”来实现,那么计算机是怎么移动这些物体的呢?这些坐标自然有了作用。

1.1平移:

x’=x+tx
y’=y+ty

由于在计算机中对物体进行顶点之间的操作过去繁琐,在对多物体操作的时候用矩阵的乘法进行运算不仅大大提高了效率,也方便了物体进行连续的变换。

加法转变成矩阵相乘比较有意思~由于加法中涉及到常量tx和ty所以无法直接通过2*2矩阵进行变换,在这里给兄弟萌讲解一个技巧——齐次坐标,这种给矩阵添加一个维度的技巧在矩阵运算中经常用到,还可以通过其次坐标进行矩阵的除法运算。

1.2缩放:

x’=Sx * x
y’=Sy * y

1.3旋转:

如图:可得出旋转后的坐标为:(通过正弦公式和余弦公式)

x’=xcosθ-ysinθ
y’=xsinθ+ycosθ

通过这个结果我们推导到矩阵计算是:

根据这样的定义,我们就可以推导二维空间中的任意变换都可以用一个3 * 3 矩阵来表示。

同理,在三维空间中的任意变换我们可以用一个4 * 4 矩阵来表示。

在4 * 4矩阵中还可以实现三维物体的透视投影,凭借齐次坐标实现矩阵的除法等等。

当然了关于矩阵还有很多更深入的知识等着大家探索,为师之后也会给大家持续教学!

1.4矩阵乘法

加减法为师就不介绍了,想必兄弟萌也都明白。

2.java实现矩阵的相关运算

2.1创建矩阵:

public int[][] createMatric(int row,int colum){
		@SuppressWarnings("resource")
		Scanner input=new Scanner(System.in);
		int array[][]=new int[row][colum];
		for(int i=0;i<array.length;i++)
			for(int j=0;j<array[i].length;j++){
				array[i][j]=input.nextInt();
			}
		return array;
	}

2.2矩阵加法:

public int[][] matricAdd(int matric1[][],int matric2[][] ){
		int matric3[][]=new int[matric1.length][matric1[0].length];
		if(matric1.length!=matric2.length||matric1[0].length!=matric2[0].length){
			System.out.println("输入格式有误");
			System.exit(0);
		}else{
			for(int i=0;i<matric1.length;i++)
				for(int j=0;j<matric1[0].length;j++)
					matric3[i][j]=matric1[i][j]+matric2[i][j];
		}
		return matric3;
	}

2.3矩阵减法:

public int[][] matricJian(int matric1[][],int matric2[][] ){
		int matric3[][]=new int[matric1.length][matric1[0].length];
		if(matric1.length!=matric2.length||matric1[0].length!=matric2[0].length){
			System.out.println("输入格式有误");
			System.exit(0);
		}else{
			for(int i=0;i<matric1.length;i++)
				for(int j=0;j<matric1[0].length;j++){
					matric3[i][j]=matric1[i][j]-matric2[i][j];
				}
		}
		return matric3;
	}

2.4矩阵乘法:

public int[][] matricCheng(int matric1[][],int matric2[][]){
		int matric3[][]=new int[matric1.length][matric1[0].length];
		if(matric1.length!=matric2[0].length||matric1[0].length!=matric2.length){
			System.out.println("输入格式有误");
			System.exit(0);//退出虚拟机
		}else {
			for(int i=0;i<matric1.length;i++)
				for(int j=0;j<matric2[0].length;j++)
					for(int k=0;k<matric2.length;k++)
						matric3[i][j]+=matric1[i][k]*matric2[k][j];
		}
		return matric3;
	}

2.5矩阵的转置

public int[][] matricReserve(int matric[][]){
		int matric3[][]=new int[matric[0].length][matric.length];
		for(int i=0;i<matric.length;i++) {
			for(int j=0;j<matric[0].length;j++) {
				matric3[j][i]=matric[i][j];
			}
		}
		return matric3;
	}

2.6矩阵和数字相乘

public int[][] matricShuCheng(int matric[][],int x){
		for(int i=0;i<matric.length;i++)
			for(int j=0;j<matric[0].length;j++) {
				matric[i][j]=matric[i][j]*x;
			}
		return matric;
	}

2.7矩阵的输出

public void inputMatric(int matric[][]) {
		System.out.println("运算结果为:");
		for(int i=0;i<matric.length;i++) {
			for(int j=0;j<matric[0].length;j++) {
				System.out.print(matric[i][j]+" ");
			}
			System.out.println("");
		}
	}

到此这篇关于Java 超详细带你掌握矩阵的运算的文章就介绍到这了,更多相关Java 矩阵内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java实现矩阵加减乘除及转制等运算功能示例

    本文实例讲述了Java实现矩阵加减乘除及转制等运算功能.分享给大家供大家参考,具体如下: Java初学,编写矩阵预算程序,当做工具,以便以后写算法时使用. public class MatrixOperation { public static int[][] add(int[][] matrix_a, int[][] matrix_b) { int row = matrix_a.length; int col = matrix_a[0].length; int[][] result = new

  • Java 超详细带你掌握矩阵的运算

    目录 1.物体的坐标变换 1.1平移: 1.2缩放: 1.3旋转: 1.4矩阵乘法 2.java实现矩阵的相关运算 2.1创建矩阵: 2.2矩阵加法: 2.3矩阵减法: 2.4矩阵乘法: 2.5矩阵的转置 2.6矩阵和数字相乘 2.7矩阵的输出 在我们计算机江湖中一直流传着这样一句话:矩阵是无所不能的.我们在荧幕中所看到的二维三维图形的移动变换,放大缩小,任由我们的“摆布”,可是你知道这些变换是如何在计算机中实现的吗?在这一章耀杨带着兄弟萌初步了解这无所不能的矩阵,也为了破掉这层矩阵找到佳慧!!

  • Java超详细教你写一个学籍管理系统案例

    目录 前言 一.学籍管理系统功能介绍 1.介绍 2.学籍管理系统的主要功能图示 3.代码编写的思路 二.定义学生类 1.学生类名称: 2.包含的成员变量 3.构造方法 4.成员方法 5.代码示例 三.主界面的代码编写 1.思路 2.代码示例 四.系统功能方法的实现 1.添加学生信息的代码编写 1.1 思路 1.2 添加学生信息的方法说明图 1.3 代码示例 2.查看学生信息的代码编写 2.1 思路 2.2 查看学生信息的方法说明图 2.3 代码示例 3.删除学生信息的代码编写 3.1 思路 3.

  • Java超详细教你写一个网络购书系统案例

    目录 一.购书系统 1.前言 2.功能介绍 3.分析 二.图书类(Book) 1.类名及属性 2.代码示例 三.订单项类(OrderItem) 1.类名及属性 2.代码示例 四.订单类(Order) 1.类名及属性 2.代码示例 五.测试类(Test) 1.编写打印图书信息的方法 2.编写购买图书的方法 3.编写打印订单信息方法 4.编写main方法 六.总结 一.购书系统 1.前言 伴随着互联网的飞速发展,网络购书系统作为电子商务的一种形式,正以其高效.低成本的优势逐步成为新兴的经营模式,人们

  • Java 超详细讲解类的定义方式和对象的实例化

    目录 1.面对对象的初步认识 1.1什么是面向对象 1.2面向对象与面向过程 2.类的定义与使用 2.1简单认识类 2.2 类的定义格式 3.类的实例化 3.1什么是实例化? 3.2重点笔记 总结 1.面对对象的初步认识 1.1什么是面向对象 用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计.扩展以及维护都非常友好. 1.2面向对象与面向过程 举一个买手机的例子 以面向对象的方式来处理买手机这件事的话,我们就不需要关注买手机的过程,具体手机怎么买,如何到手,用户不用去关心,

  • Java 超详细讲解对象的构造及初始化

    目录 如何初始化对象 构造方法 特性 默认初始化 就地初始化 如何初始化对象 我们知道再Java方法内部定义一个局部变量的时候,必须要初始化,否则就会编译失败 要让这串代码通过编译,很简单,只需要在正式使用a之前,给a设置一个初始值就好那么对于创造好的对象来说,我们也要进行相对应的初始化我们先写一个Mydate的类 public class MyDate { public int year; public int month; public int day; /** * 设置日期: */ pub

  • Java 超详细讲解类的定义方式和对象的实例化

    目录 1.面对对象的初步认识 1.1什么是面向对象 1.2面向对象与面向过程 2.类的定义与使用 2.1简单认识类 2.2 类的定义格式 3.类的实例化 3.1什么是实例化? 3.2重点笔记 总结 1.面对对象的初步认识 1.1什么是面向对象 用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计.扩展以及维护都非常友好. 1.2面向对象与面向过程 举一个买手机的例子 以面向对象的方式来处理买手机这件事的话,我们就不需要关注买手机的过程,具体手机怎么买,如何到手,用户不用去关心,

  • Java超详细分析继承与重写的特点

    概念:继承是面向对象语法三大特征之一,继承可以降低代码的沉余度,提高编程的效率.通过继承子类可以随意调用父类中的某些属性与方法,一个子类只能继承一个父类,一个父类可以被多个子类继承.它就好比与我们显示生活中孩子继承父亲的财产.重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类能够根据需要实现父类的方法,就好比金毛与哈士奇他的特征都是来自狗,仓鼠与松鼠他们他们的特征来自老鼠,而他们身上的不同属于基因突变就相当于重写 继承的特点: 1):java中只支持单根继承,即一个类只能有一个

  • Java超详细分析泛型与通配符

    目录 1.泛型 1.1泛型的用法 1.1.1泛型的概念 1.1.2泛型类 1.1.3类型推导 1.2裸类型 1.3擦除机制 1.3.1关于泛型数组 1.3.2泛型的编译与擦除 1.4泛型的上界 1.4.1泛型的上界 1.4.2特殊的泛型上界 1.4.3泛型方法 1.4.4类型推导 2.通配符 2.1通配符的概念 2.2通配符的上界 2.3通配符的下界 题外话: 泛型与通配符是Java语法中比较难懂的两个语法,学习泛型和通配符的主要目的是能够看懂源码,实际使用的不多. 1.泛型 1.1泛型的用法

  • Java 超详细讲解设计模式之中的抽象工厂模式

    目录 抽象工厂模式 1.什么是抽象工厂 2.抽象工厂模式的优缺点 3.抽象工厂模式的结构与实现 4.抽象工厂方法模式代码实现 5.抽象工厂模式的应用场景 6.抽象工厂模式的扩展 抽象工厂模式 前面文章介绍的工厂方法模式中考虑的是一类产品的生产,比如案例中的百事可乐工厂只能生产百事可乐,可口可乐工厂只能生产可口可乐,也就是说:工厂方法模式只考虑生产同等级的产品. 1.什么是抽象工厂 在现实生活中许多工厂是综合型的工厂,能生产多种类)的产品,就拿案例里面的可乐来说,在节日的时候可能会有圣诞版的可乐,

  • Java 超详细讲解IO操作字节流与字符流

    目录 IO操作 字节流 FileInputStream FileOutputStream 字节流读写案例 字符流 FileReader FileWriter 字节流与字符流的区别 IO操作 字节流 java.io.InputStream 输入流,主要是用来读取文件内容的. java.io.OutputStream 输出流,主要是用来将内容字节写入文件的. FileInputStream 该流用于从文件读取数据,它的对象可以用关键字 new 来创建. 有多种构造方法可用来创建对象. 可以使用字符串

随机推荐