`

z 字型 读取 矩阵

阅读更多
以 z 字型 读取 矩阵,

------
思路

以矩阵的 左斜切线 为读取单元,

步骤:
* 求出 左斜切线 个数
* 遍历 左斜切线
      * 求出 左斜切线的 长度
      * 求出 左斜切线的 起点、止点
      * 遍历 左斜切线,遍历方向 由 左斜切线的index 决定,
      *
*

------
主要用到的数学知识

* m 行 n 列 矩阵中
      * 共有 m+n-1 个 左斜切线
      * 每条左斜切线的长度 = (左斜切线的index + 1) - 该线超出row长度 - 该线超出col长度
      *
*

------
示例

* js
/**
 * z read array
 * @date 2010-10-23 15:30
 * @author kuchaguangjie
 * @blog http://kuchaguangjie.iteye.com
 */
var arr_one = [ 
 [ 0,  2,  3,  9, 10, 19, 20, 29, 30, 39],
 [ 1,  4,  8, 11, 18, 21, 28, 31, 38, 40],
 [ 5,  7, 12, 17, 22, 27, 32, 37, 41, 46],
 [ 6, 13, 16, 23, 26, 33, 36, 42, 45, 47],
 [14, 15, 24, 25, 34, 35, 43, 44, 48, 49] 
];
var arr_two= [
  	[ 0,  2,  3,  9, 10, 20, 21, 35],
  	[ 1,  4,  8, 11, 19, 22, 34, 36],
  	[ 5,  7, 12, 18, 23, 33, 37, 51],
  	[ 6, 13, 17, 24, 32, 38, 50, 52],
  	[14, 16, 25, 31, 39, 49, 53, 64],
  	[15, 26, 30, 40, 48, 54, 63, 65],
  	[27, 29, 41, 47, 55, 62, 66, 73],
  	[28, 42, 46, 56, 61, 67, 72, 74],
  	[43, 45, 57, 60, 68, 71, 75, 78],
  	[44, 58, 59, 69, 70, 76, 77, 79]
  ];
function zRead(arr) {
	// 行数
	var rowCount = arr.length;
	// 列数
	var colCount = arr[0].length;
	// 斜切次数
	var cut = rowCount + colCount - 1;
	// 结果
	var result = [];
	// 上 或 右 点
	var topOrRightPoint;
	// 左 或 下 点
	var leftOrBottomPoint;
	for ( var i = 0; i < cut; i++) {
		// 斜线超出 row 的长度
		var rowExtraCount = (i + 1) > rowCount ? (i + 1 - rowCount) : 0;
		// 斜线超出 col 的长度
		var colExtraCount = (i + 1) > colCount ? (i + 1 - colCount) : 0;
		// 斜线长度
		var len = (i + 1) - rowExtraCount - colExtraCount;
		topOrRightPoint = new Point(colExtraCount, i - colExtraCount);
		leftOrBottomPoint = new Point(i - rowExtraCount, rowExtraCount);
		if (i % 2 == 0) { // 由 topOrRight 向 leftOrBottom 读数据
			while (len-- > 0) {
				result[result.length] = arr[leftOrBottomPoint.rowIndex - len][leftOrBottomPoint.colIndex + len];
			}
		} else { // 由 leftOrBottom 向 topOrRight 读数据
			while (len-- > 0) {
				result[result.length] = arr[topOrRightPoint.rowIndex + len][topOrRightPoint.colIndex - len];
			}
		}
	}
	return result;
}
/**
 * 行列中的 1个点的位置
 * 
 * @param rowIndex
 *            行 index
 * @param colIndex
 *            列 index
 * @return
 */
function Point(rowIndex, colIndex) {
	this.rowIndex = rowIndex;
	this.colIndex = colIndex;
}



* html 测试文件
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="js/z_read.js"></script>
<script type="text/javascript">
function showResult(arr){
	document.getElementById('resultDiv').innerHTML=zRead(arr);
}
</script>
</head>
<body>
<input type="button" value="z_read 1" onclick="showResult(arr_one);" />
<input type="button" value="z_read 2" onclick="showResult(arr_two);" />
<div id="resultDiv" style="width: 300px;border:1px solid green;overflow: scroll;">
</div>
</body>
</html>



------
分享到:
评论
2 楼 yangguo 2010-11-02  
牛人。
1 楼 zxflb 2010-10-28  
楼主思路很清晰 学习了

相关推荐

    对矩阵进行Z型遍历

    对一个矩阵进行Z字型遍历,然后输出

    行业文档-设计装置-一种Z字型钢结构顶升装置.zip

    在本压缩包文件“行业文档-设计装置-一种Z字型钢结构顶升装置.zip”中,包含的主要内容是关于一种Z字型钢结构顶升装置的设计和应用。这种装置主要用于建筑施工过程中,对大型钢结构进行安全、高效地提升与安装。接...

    行业分类-电子-Z字型线圈结构变压器、高压单芯电缆接地系统的说明分析.rar

    Z字型线圈结构的变压器和高压单芯电缆的接地系统是两个特殊的主题,本文将深入探讨这两个概念及其相关知识点。 首先,Z字型线圈结构变压器是一种特殊的变压器设计,其主要特点是绕组的排列方式。传统的变压器通常...

    行业资料-交通装置-Z字型折叠海马攀附器.zip

    行业资料-交通装置-Z字型折叠海马攀附器.zip

    电子政务-一种采用跳线上绕的Z字型边坡输电线路耐张塔.zip

    在这个特定的案例中,我们关注的是电子政务在输电线路建设中的应用,特别是采用跳线上绕的Z字型边坡输电线路耐张塔的设计。 首先,输电线路是电力系统的重要组成部分,用于传输和分配电能。耐张塔作为输电线路上的...

    matlab开发-Z字形编码和HuffMancodingJPegMatlabcode

    Z字形编码是一种扫描策略,将图像的像素矩阵按照“Z”字形路径进行遍历,以便在有限的位流中有效地表示二维数据。这种方法可以将相邻的像素值聚在一起,有利于压缩过程中发现更多的冗余。 哈夫曼编码是一种基于频率...

    基布横动式Z字型织草装置的研制及摆幅分析 (2014年)

    为提高人造草坪基布的承载能力及草簇分布的均匀性,提出了一种偏心轮式基布横动装置,实现了人造草坪的Z字型织造,并研究了Z字型摆幅大小对人造草坪基布承载能力的影响.文中建立了基布横动装置的虚拟样机模型,并进行了...

    低级汇编程序——3个字型变量中零的个数

    设在X、Y、Z字型变量中存放着三个无符号数,若其中有一个数为0,则把DH寄存器置1;若其中有两个数为0,则把DH寄存器置2;若其中三个数都为0,则把DH寄存器置3;若三个数都不为0,则求出它们的和(不考虑溢出)存入W...

    五笔字型练习TC源代码

    - `LISTDBF.C`:可能涉及到数据库文件(DBF)的操作,如读取或列出五笔字型编码的数据库。 - `YHFILE.C`:可能包含与文件操作相关的函数,如打开、关闭、读写等。 - `RDWPS.C`:可能用于读取或解析WPS文件,WPS是一...

    4X4矩阵键盘实验共阳数码显示

    ### 4X4矩阵键盘与共阳数码管显示实验解析 #### 实验目的与原理 在本实验中,我们探讨了如何使用一个4X4矩阵键盘进行输入,并通过共阳极数码管显示输入的字符。实验的核心在于理解矩阵键盘的工作原理、共阳极...

    86版五笔字型键盘字根总图

    值得注意的是,“Z”键在86版五笔字型中未被分配字根,作为万能学习键,它可以替代识别码,也可以临时替代用户记不清或不确定的字根,通过提示行显示对应的键位或字根信息。 五笔字型通过科学的编码规则和有效的...

    五笔字型86版

    《五笔字型86版:汉字输入法的里程碑》 五笔字型86版,作为汉字输入法的一种,自上世纪80年代末推出以来,便以其高效、快捷的特性在计算机用户中广泛流传。它由王永民先生精心设计,基于汉字的构造原理,将每个汉字...

    ST7920中文字型码表

    ST7920中文字型码表是针对ST7920芯片的LCD显示系统中,12864液晶屏幕显示汉字时所使用的字型码表。ST7920是一款常用于工业、消费类电子产品的控制器,能够控制128x64点阵的LCD显示屏,支持中文、英文、图形等显示...

    ST7920 GB中文字型码表

    标题和描述中的“ST7920 GB中文字型码表”主要涉及到的是在特定的显示设备或系统中,如何通过编码来表示和显示中文字符的技术。ST7920是一种常用的字符液晶显示控制器,而GB编码(通常指的是GB2312编码)是中国大陆...

    39碼字型檔

    1. **字符集**:39码包含43个字符,包括0-9的数字,A-Z的大写字母,以及"*"、"+"、"$"、"/"、"%"五个特殊字符,以及一个起始/终止符和一个空格字符。每个字符由9个条和9个空组成,分为宽条、窄条和宽空,其中3个为宽...

    五笔字型 识别码.ppt

    《五笔字型识别码详解》 五笔字型是一种基于汉字笔画和部首的汉字输入法,其中识别码是解决重码问题的关键。施旭梅老师在江苏省通州职业高级中学的讲解中,详细阐述了五笔字型识别码的构成、规则及其应用,以下是对...

    五笔字型查询器.rar

    《五笔字型查询器——探索汉字输入的高效路径》 五笔字型查询器,作为一款专为学习和使用五笔字型输入法设计的工具,它在信息技术领域扮演着重要的角色。五笔字型,是王永民先生于1983年发明的一种汉字输入法,以其...

    五笔字型查询器 v1.0

    《五笔字型查询器 v1.0:高效学习与应用指南》 五笔字型查询器是一款专为初学者和五笔输入法使用者设计的实用工具,它以简洁的界面和高效的查询功能,帮助用户迅速查找五笔字型编码,从而提升五笔输入的效率。在...

    五笔字型编码查询系统

    《五笔字型编码查询系统:深入理解和高效应用》 五笔字型编码查询系统,作为汉字输入法的重要工具,对于熟悉五笔字型的用户来说,无疑是一大助力。五笔字型,全称为“五笔字元输入法”,是由王永民先生在1983年发明...

    五笔字型编码查询手册

    从提供的部分内容来看,手册采用了一定的编码结构,例如目录中的字母(A-Z)和数字(1-78)可能代表着不同的笔画组合或字根的起始页码,以及注音和汉字编码之间的对应关系。注音部分可能是指汉字的拼音,便于读者...

Global site tag (gtag.js) - Google Analytics