分享个自用的矩阵乘法工具,只支持4x4矩阵乘4x4矩阵,以及4x4矩阵乘4x1矩阵。
网上也有类似的矩阵在线计算工具,但是没一个用着爽的,比如从CE复制出来的矩阵,粘贴到一些已有的在线计算工具网站上,还要自己添加换行之类的,所以就自己写了一个,界面简单,但是用起来没毛病,
视频的点赞量与粉丝量的比例有点低,原本是想说点赞之后私信领的,但又想了想,这样做有点像那种洗稿营销号,算了…,反正代码量也不多,也是以前自己有需要才做的,直接发吧,只求收藏视频的时候,顺手点个赞~
复制代码到记事本,另存为后缀改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
|