目录

4x4矩阵与4x4矩阵 乘法计算器,JS源码

目录

分享个自用的矩阵乘法工具,只支持4x4矩阵乘4x4矩阵,以及4x4矩阵乘4x1矩阵。

网上也有类似的矩阵在线计算工具,但是没一个用着爽的,比如从CE复制出来的矩阵,粘贴到一些已有的在线计算工具网站上,还要自己添加换行之类的,所以就自己写了一个,界面简单,但是用起来没毛病,

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/dcfe49a525180243d29e0659e14d87542ffe5cb2.png

视频的点赞量与粉丝量的比例有点低,原本是想说点赞之后私信领的,但又想了想,这样做有点像那种洗稿营销号,算了…,反正代码量也不多,也是以前自己有需要才做的,直接发吧,只求收藏视频的时候,顺手点个赞~

复制代码到记事本,另存为后缀改html,再用浏览器打开即可:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<!doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<title>4*4矩阵计算器</title>

		<style>
			td{
				min-width: 6em;
			}
		</style>
	</head>
	<body>
		<p>仅支持输入4*4矩阵,16个数字,空格隔开,无需换行: </p>
		<button onclick='identity("matrixA")'>填入单位矩阵</button>
		<input id='matrixA' value=''>
		<button onclick='transpose("matrixA")'>转置</button>

		<p>仅支持输入4*4或4*1矩阵,16或4个数字,空格隔开,无需换行: </p>
		<button onclick='identity("matrixB")'>填入单位矩阵</button>
		<input id='matrixB' value="">
		<button onclick='transpose("matrixB")'>转置</button>

		<br><br>
		<button onclick='calc()'>计算</button>

		<p>结果:</p>
		<table id='res'></table>

		<script>
			function identity(id){
				document.querySelector('#' + id).value = '1 0 0 0   0 1 0 0   0 0 1 0   0 0 0 1'
			}

			function transpose(id){
				let e = document.querySelector('#' + id)
				let arr = e.value.trim().split(/\s+/g)
				if(arr.length != 16){
					alert('本工具仅适用于4*4矩阵转置,请检查!(元素个数:' + arr.length + ')')
				}
				let res = arr[0] + ' '
				res += arr[4] + ' '
				res += arr[8] + ' '
				res += arr[12] + '   '

				res += arr[1] + ' '
				res += arr[5] + ' '
				res += arr[9] + ' '
				res += arr[13] + '   '

				res += arr[2] + ' '
				res += arr[6] + ' '
				res += arr[10] + ' '
				res += arr[14] + '   '

				res += arr[3] + ' '
				res += arr[7] + ' '
				res += arr[11] + ' '
				res += arr[15] + '   '

				e.value = res
			}

			function calc(){
				let matrixA = document.querySelector('#matrixA')
				let matrixB = document.querySelector('#matrixB')
				let res = document.querySelector('#res')
				let c = []

				let a = matrixA.value.trim().split(/\s+/g).map(parseFloat)
				let b = matrixB.value.trim().split(/\s+/g).map(parseFloat)
				if(a.length != 16){
					alert('本程序仅允许4*4矩阵与4*1矩阵相乘!矩阵A的元素个数' + a.length)
					return
				}

				if(b.length == 16){

					c.push(a[0] * b[0] + a[1] * b[4] + a[2] * b[8] + a[3] * b[12])
					c.push(a[0] * b[1] + a[1] * b[5] + a[2] * b[9] + a[3] * b[13])
					c.push(a[0] * b[2] + a[1] * b[6] + a[2] * b[10] + a[3] * b[14])
					c.push(a[0] * b[3] + a[1] * b[7] + a[2] * b[11] + a[3] * b[15])

					c.push(a[4] * b[0] + a[5] * b[4] + a[6] * b[8] + a[7] * b[12])
					c.push(a[4] * b[1] + a[5] * b[5] + a[6] * b[9] + a[7] * b[13])
					c.push(a[4] * b[2] + a[5] * b[6] + a[6] * b[10] + a[7] * b[14])
					c.push(a[4] * b[3] + a[5] * b[7] + a[6] * b[11] + a[7] * b[15])

					c.push(a[8] * b[0] + a[9] * b[4] + a[10] * b[8] + a[11] * b[12])
					c.push(a[8] * b[1] + a[9] * b[5] + a[10] * b[9] + a[11] * b[13])
					c.push(a[8] * b[2] + a[9] * b[6] + a[10] * b[10] + a[11] * b[14])
					c.push(a[8] * b[3] + a[9] * b[7] + a[10] * b[11] + a[11] * b[15])

					c.push(a[12] * b[0] + a[13] * b[4] + a[14] * b[8] + a[15] * b[12])
					c.push(a[12] * b[1] + a[13] * b[5] + a[14] * b[9] + a[15] * b[13])
					c.push(a[12] * b[2] + a[13] * b[6] + a[14] * b[10] + a[15] * b[14])
					c.push(a[12] * b[3] + a[13] * b[7] + a[14] * b[11] + a[15] * b[15])

					res.innerHTML = '<tr>' + '<td>' + c[0] + '</td>' + '<td>' + c[1] + '</td>' + '<td>' + c[2] + '</td>' + '<td>' + c[3] + '</td>' + '</tr>'
					res.innerHTML += '<tr>' + '<td>' + c[4] + '</td>' + '<td>' + c[5] + '</td>' + '<td>' + c[6] + '</td>' + '<td>' + c[7] + '</td>' + '</tr>'
					res.innerHTML += '<tr>' + '<td>' + c[8] + '</td>' + '<td>' + c[9] + '</td>' + '<td>' + c[10] + '</td>' + '<td>' + c[11] + '</td>' + '</tr>'
					res.innerHTML += '<tr>' + '<td>' + c[12] + '</td>' + '<td>' + c[13] + '</td>' + '<td>' + c[14] + '</td>' + '<td>' + c[15] + '</td>' + '</tr>'

					return
				}

				if(b.length == 4){
					c.push(a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3])
					c.push(a[4] * b[0] + a[5] * b[1] + a[6] * b[2] + a[7] * b[3])
					c.push(a[8] * b[0] + a[9] * b[1] + a[10] * b[2] + a[11] * b[3])
					c.push(a[12] * b[0] + a[13] * b[1] + a[14] * b[2] + a[15] * b[3])

					res.innerHTML = '<tr>' + '<td>' + c[0] + '</td>' + '</tr>'
					res.innerHTML += '<tr>' + '<td>' + c[1] + '</td>' + '</tr>'
					res.innerHTML += '<tr>' + '<td>' + c[2] + '</td>' + '</td>' + '</tr>'
					res.innerHTML += '<tr>' + '<td>' + c[3] + '</td>' + '</td>' + '</tr>'

					res.innerHTML += '<tr><td style="color:red;">NDC: <br>' +  c[0] / c[3] + '<br>' +  c[1] / c[3] + '<br>' +  c[2] / c[3] + '</td></tr>'
					return
				}

				alert('本程序仅允许4*4矩阵与4*1矩阵相乘!矩阵B的元素个数:' + b.length)
			}

		</script>

	</body>
</html> 作者:赶码人 https://www.bilibili.com/read/cv14474093?spm_id_from=333.999.0.0 出处:bilibili