精华内容
下载资源
问答
  • 非线性结构包括:二维数组、多维数组、广义、树结构、图结构 稀疏数组 当一个数组大部分元素为0,或大部分为重复数值。可以使用稀疏数组来简化二维数组。第一行值:一共多少行、一共多少列,一共多少数据。第二...

    线性结构的特点:

    数据元素之间是一对一的线性关系。

    存储结构有两种:
    顺序存储和链式存储。分别对应顺序表和链式表
    顺序表:存储元素是连续的(数组)
    链式表:存储元素不一定连续(链表)
    线性结构常见的有:数组、队列、链表和栈
    连续指的是地址是连续的。

    非线性结构:

    不是一对一的关系
    非线性结构包括:二维数组、多维数组、广义表、树结构、图结构

    稀疏数组

    当一个数组大部分元素为0,或大部分为重复数值。可以使用稀疏数组来简化二维数组。第一行的值:一共多少行、一共多少列,一共多少数据。第二行的值:行、列。对应的值
    第三行到下面都是类似第二行。
    在这里插入图片描述
    稀疏数组的作用:压缩空间,提高性能

    二维数组和稀疏数组是如何相互转化的呢?

    二维数组转稀疏数组:
    1.读取二维数组的有效数据,有效数组为Sum
    2.创建一个稀疏数组sparseArr int[sum+1][3]
    3.将有效数据写入到稀疏数组中

    稀疏数组转成二维数组:
    1.读取第一行的数据,确定二维数组的行和列的值
    2.从后面的行中读取数据写入到二维数组中

    代码中的冒号是重点

    一种新的遍历二维数组方式

    public class test1 {
    
    	public static void main(String[] args) {
    		// 创建一个二维数组,行和列都是11
    		//用1表示白子,2表示黑子
    		int chessArry[][] = new int[11][11];
    		chessArry[1][2] = 1;
    		chessArry[2][3] = 2;
    		//遍历出数组
    		for(int[] row : chessArry) {//循环遍历每一个数组元素,提取出来的数据是一行一行的数据
    			for(int data : row) {//将上面一行一行的数据再次遍历出来一个一个的值
    				System.out.printf("%d\t",data);			
    			}
    			System.out.printf("\n");		
    			
    		}			
    	}
    }
    

    在这里插入图片描述
    这里没有对其他数组中的元素赋值,输出为0,默认为0,这里是int类型的数组
    如果是String类型的数组默认值则为null

    package alibab;
    
    
    import java.io.*;
    
    public class test1 {
    
    	public static void main(String[] args) throws IOException {
    		// 创建一个二维数组,行和列都是11
    		//用1表示白子,2表示黑子
    		int  chessArry[][] = new int[11][11];
    		
    		  chessArry[1][2] = 1; 
    		  chessArry[2][3] = 2;		 
    		//遍历出数组
    		  System.out.println("输出二维数组:");
    		for(int[] row : chessArry) {//循环遍历每一个数组元素,提取出来的数据是一行一行的数据
    			for(int data : row) {//将上面一行一行的数据再次遍历出来一个一个的值
    				System.out.printf("%d\t",data);			
    			}
    			System.out.printf("\n");		
    		}	
    		//获取有效数据sum的值
    		int sum = 0;
    		for(int i = 0;i < 11;i ++) {
    			for(int j = 0;j < 11;j++) {
    				if (chessArry[i][j] != 0) {
    					sum ++;
    				}					
    			}	
    		}
    		System.out.println("输出sum值:");
    		System.out.println(sum);	
    		int sparseArr[][] = new int[sum + 1][3];
    		//先对稀疏数组的第一行赋值
    		sparseArr[0][0] = 11;
    		sparseArr[0][1] = 11;
    		sparseArr[0][2] = sum;
    		
    		int row = 1;//用于记录稀疏举证的有效行数,基础值为1
    		for(int i = 0;i < 11;i ++) {
    			for(int j = 0;j < 11;j++) {
    				if (chessArry[i][j] != 0) {
    					//只处理有效的数据					
    					int value = chessArry[i][j];
    					sparseArr[row][0] = i;
    					sparseArr[row][1] = j;
    					sparseArr[row][2] = value;
    					row++;
    				}					
    			}	
    		}
    		//
    		System.out.println("输出稀疏数组:");
    		for(int[] Srow : sparseArr) {//循环遍历每一个数组元素,提取出来的数据是一行一行的数据
    			for(int data : Srow) {//将上面一行一行的数据再次遍历出来一个一个的值
    				System.out.printf("%d\t",data);			
    			}
    			System.out.printf("\n");		
    		}	
    		//将稀疏数组恢复为原始数组
    		/**
    		 * 先获取原始数组的大小
    		 */
    		int chessArry2[][]= new int[sparseArr[0][0]][sparseArr[0][1]];
    		
    		
    		for(int i = 1;i < sparseArr.length ;i ++) {	//	sparseArr.length 指的是二维数组行的数目	
    			/*
    			 * int a = sparseArr[i][0]; int b = sparseArr[i][1]; int c = sparseArr[i][2];
    			 */
    				chessArry2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];				
    		}
    		//输出还原的原始数组
    		for(int[] row2 : chessArry2) {//循环遍历每一个数组元素,提取出来的数据是一行一行的数据
    			for(int data : row2) {//将上面一行一行的数据再次遍历出来一个一个的值
    				System.out.printf("%d\t",data);			
    			}
    			System.out.printf("\n");		
    		}	
    		
    
    展开全文
  • 一般做OA类管理系统,经常涉及到“组织架构”的概念,那么像这种有上下层级关系的数据一般会做成树形菜单的方式显示,... 首先来看二维表的显示效果图: 如果看到这里,你觉得这就是你想要的显示效果,或者对此...

      一般做OA类管理系统,经常涉及到“组织架构”的概念,那么像这种有上下层级关系的数据一般会做成树形菜单的方式显示,底层代码必定会用到递归算法。这篇随笔的目的就是要谈谈除了用树形菜单来显示这种上下层级关系的数据,还有其他的显示方式吗?答案是有的,例如即将要谈到的二维表显示方式,同时也是本随笔的核心内容。

      首先来看二维表的显示效果图:

    如果看到这里,你觉得这就是你想要的显示效果,或者对此比较感兴趣。请接着往下看的实现步骤:

    1.取出所有的数据临时保存到DataTable中,即内存中,拼html时直接查DataTable中的数据,不用去反复读取数据库,提高效率;

    2.根据节点编号获取该节点下所有的末端子节点编号,因为末端子节点的个数就决定了<table>的行数;

    3.将查到的末端子节点编号的所有父节点编号也查出来,拼接起来,就知道了<table>的每行的列数;

    4.对节点的编号进行排序,这样可以把每列下的相同行的节点编号集中在一起,方便后面的合并单元格;

    5.遍历行和列,合并每列相同行的单元格;

    6.最后一步,拼接空白的列。

    如下是具体代码实现过程:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Web;
      5 using System.Data;
      6 using System.Text;
      7 
      8 /// <summary>
      9 ///KpiTable 的摘要说明
     10 /// </summary>
     11 public class KpiTable
     12 {
     13     DBUtility.SQLHelper sqlhelper = new DBUtility.SQLHelper();
     14     public string GetKpiTable(string kpino, string businessno, string tenderno)
     15     {
     16         //1.取出所有的数据临时保存到dt2,即内存中,拼html时直接查dt2中的数据,不用去反复读取数据库,提高效率
     17         DataTable dt2 = new DataTable();
     18         {
     19             DataSet ds = new DataSet();
     20             int i = sqlhelper.RunSQL(string.Format("select count(1) from sys.objects where name = 'KpiValue{0}'", businessno));
     21             if (string.IsNullOrEmpty(tenderno) || i<1)//如果有标段编号就要把KpiValueXXX表里的KpiValue1查出来显示
     22             {
     23                 sqlhelper.RunSQL(string.Format(@"select KpiNo,KpiName,KpiInfo,ISNULL(KpiParentNo,0) KpiParentNo,KpiWeight,0 KpiValue1,'' KpiMethod,'' KpiSampleType,'' KpiRule,'' KpiCriterion,'' KpiAreaRule,'' KpiSampleRule from KpiTree{0}
     24 union all select KpiNo,KpiName,KpiInfo,ISNULL(KpiParentNo,0) KpiParentNo,KpiWeight,0 KpiValue1,KpiMethod,KpiSampleType,KpiRule,KpiCriterion,KpiAreaRule,KpiSampleRule from Kpi{0}",businessno), ref ds);
     25             }
     26             else
     27             {
     28                 sqlhelper.RunSQL(string.Format(@"select * from (
     29 select KpiNo,KpiName,KpiInfo,ISNULL(KpiParentNo,0) KpiParentNo,KpiWeight,0 KpiValue1,'' KpiMethod,'' KpiSampleType,'' KpiRule,'' KpiCriterion,'' KpiAreaRule,'' KpiSampleRule from KpiTree{0}
     30 union all select KpiNo,KpiName,KpiInfo,ISNULL(KpiParentNo,0) KpiParentNo,KpiWeight,0 KpiValue1,KpiMethod,KpiSampleType,KpiRule,KpiCriterion,KpiAreaRule,KpiSampleRule from Kpi{0}
     31 ) a left join KpiValue{0} b on a.kpino = b.kpino and TenderNo='{1}'", businessno, tenderno), ref ds);
     32             }
     33             dt2 = ds.Tables[0];
     34         }
     35         //2.根据节点编号获取该节点下所有的末端子节点编号,因为末端子节点的个数就决定了table的行数
     36         DataTable dt = new DataTable();
     37         {
     38             DataSet ds = new DataSet();
     39             if (string.IsNullOrEmpty(kpino) || kpino == "0")
     40             {
     41                 sqlhelper.RunSQL(string.Format(@"select kpino from (select kpino from kpitree{0} union all select kpino from Kpi{0}) t where kpino not in (select isnull(KpiParentNo,0) from (select KpiParentNo from kpitree{0} union all select KpiParentNo from Kpi{0}) t)", businessno), ref ds);
     42             }
     43             else
     44             {
     45                 string endKpiNo = RecursionEndKpiNo(dt2, kpino).Trim(',');
     46                 endKpiNo = endKpiNo == "" ? "0" : endKpiNo;
     47                 string kpinos = string.Empty;
     48                 foreach (string str in endKpiNo.Split(',')) { kpinos += "'" + str + "',"; }
     49                 kpinos = kpinos.Trim(',');
     50                 sqlhelper.RunSQL(string.Format(@"select kpino from (select kpino from kpitree{0} union all select kpino from Kpi{0}) t where kpino not in (select isnull(KpiParentNo,0) from (select KpiParentNo from kpitree{0} union all select KpiParentNo from Kpi{0}) t) and kpino in ({1})", businessno, kpinos), ref ds);
     51             }
     52             dt = ds.Tables[0];
     53         }
     54         //3.将查到的末端子节点编号的所有父节点编号也查出来,拼接起来,就知道了table的每行的列数
     55         foreach (DataRow row in dt.Rows)
     56         {
     57             row["kpino"] = Recursion(dt2, row["kpino"]);
     58         }
     59         //4.对编号进行排序,这样可以把每列下的相同行的节点编号集中在一起,方便后面的合并单元格
     60         var drArray = dt.Select("1=1", "kpino");
     61         //5.限制输出kpino之前的父节点信息
     62         foreach (DataRow row in drArray)
     63         {
     64             int index = row["kpino"].ToString().IndexOf(kpino);
     65             if (index > -1)
     66             {
     67                 row["kpino"] = row["kpino"].ToString().Substring(index);
     68             }
     69         }
     70         //6.遍历行和列
     71         int maxCount = GetMaxCount(drArray);
     72         StringBuilder sbJson = new StringBuilder();
     73         for (int i = 0; i < drArray.Length; i++)
     74         {
     75             DataRow row = drArray[i];
     76             sbJson.Append("<tr>");
     77             var kpinoArray = row["kpino"].ToString().Trim(',').Split(',');
     78             int kpinoArrayLenth = kpinoArray.Length;
     79             for (int j = 0; j < kpinoArrayLenth; j++)
     80             {
     81                 string str = kpinoArray[j];
     82                 if (str != "0")
     83                 {
     84                     var dr = dt2.Select("kpino='" + str + "'");
     85                     //合并每列相同行的单元格
     86                     if (dr.Length > 0 && !EqualUpColumnValue(i, j, drArray))
     87                     {
     88                         double kpiWeight = GetKpiWeight(dt2, str);
     89                         double kpiValue = GetKpiValue(dt2, str);
     90                         string kpiValueStr = string.IsNullOrEmpty(tenderno) ? "" : "[" + (kpiValue * kpiWeight).ToString("0.00") + "]";
     91                         string kpiDes = GetKpiDes(dt2, str);
     92                         sbJson.Append(string.Format("<td rowspan='{0}'>{1}({2}%){3}{4}</td>", GetColspan(i, j, drArray), dr[0]["kpiname"], (kpiWeight * 100).ToString("0.00"), kpiValueStr, kpiDes));
     93                     }
     94                 }
     95             }
     96             //拼接空白的列
     97             for (int j = 0; j < maxCount - kpinoArrayLenth; j++)
     98             {
     99                 sbJson.Append("<td></td>");
    100             }
    101             sbJson.Append("</tr>");
    102         }
    103         return "<table id='kpitable' border='1px'>" + sbJson.ToString() + "</table>";
    104     }
    105 
    106     private string RecursionEndKpiNo(DataTable dt, object parentId)
    107     {
    108         StringBuilder sbJson = new StringBuilder();
    109 
    110         DataRow[] rows = dt.Select(string.Format("KpiParentNo = '" + parentId + "'"));
    111         if (rows.Length > 0)
    112         {
    113             foreach (DataRow row in rows)
    114             {
    115                 string str = RecursionEndKpiNo(dt, row["kpino"]);
    116                 sbJson.Append("" + row["kpino"] + "," + str);
    117             }
    118         }
    119         return sbJson.ToString();
    120     }
    121     private bool IsChild(DataTable dt, string parentId)
    122     {
    123         DataRow[] rows = dt.Select(string.Format("KpiParentNo = '" + parentId + "'"));
    124         if (rows.Length > 0)
    125         {
    126             return true;
    127         }
    128         else
    129         {
    130             return false;
    131         }
    132     }
    133 
    134     private string Recursion(DataTable dt, object parentId)
    135     {
    136         StringBuilder sbJson = new StringBuilder();
    137 
    138         DataRow[] rows = dt.Select("kpino = '" + parentId + "'");
    139         if (rows.Length > 0)
    140         {
    141             if (rows[0]["KpiParentNo"].ToString() == "0" || rows[0]["KpiParentNo"].ToString() == "")
    142             {
    143                 sbJson.Append("0,");
    144             }
    145             else
    146             {
    147                 sbJson.Append(Recursion(dt, rows[0]["KpiParentNo"]));
    148             }
    149         }
    150         sbJson.Append(parentId.ToString() + ",");
    151         return sbJson.ToString();
    152     }
    153     private int GetMaxCount(DataRow[] drArray)
    154     {
    155         int temp = 0;
    156         foreach (DataRow row in drArray)
    157         {
    158             int count = row["kpino"].ToString().Trim(',').Split(',').Length;
    159             if (count > temp)
    160             {
    161                 temp = count;
    162             }
    163         }
    164         return temp;
    165     }
    166     private bool EqualUpColumnValue(int rowIndex, int colIndex, DataRow[] drArray)
    167     {
    168         if (rowIndex == 0)
    169         {
    170             return false;
    171         }
    172 
    173         string[] kpinoArray = drArray[rowIndex - 1]["kpino"].ToString().Trim(',').Split(',');
    174         if (kpinoArray.Length > colIndex)
    175         {
    176             string upColumnValue = drArray[rowIndex]["kpino"].ToString().Trim(',').Split(',')[colIndex];
    177             if (upColumnValue == kpinoArray[colIndex])
    178             {
    179                 return true;
    180             }
    181             else
    182             {
    183                 return false;
    184             }
    185         }
    186         else
    187         {
    188             return false;
    189         }
    190     }
    191     private int GetColspan(int rowIndex, int colIndex, DataRow[] drArray)
    192     {
    193         int colspan = 1;
    194         string[] kpinoArray = drArray[rowIndex]["kpino"].ToString().Trim(',').Split(',');
    195 
    196         while (rowIndex < drArray.Length - 1)
    197         {
    198             string[] kpinoArray2 = drArray[rowIndex + 1]["kpino"].ToString().Trim(',').Split(',');
    199             if (kpinoArray2.Length > colIndex)
    200             {
    201                 if (kpinoArray[colIndex] == kpinoArray2[colIndex])
    202                 {
    203                     colspan++;
    204                 }
    205                 else
    206                 {
    207                     break;
    208                 }
    209             }
    210             else
    211             {
    212                 break;
    213             }
    214             rowIndex++;
    215         }
    216         return colspan;
    217     }
    218     private double GetKpiWeight(DataTable dt, string kpino)
    219     {
    220         double kpiWeight = 0;
    221         var drArray = dt.Select("kpino='" + kpino + "'");
    222         if (drArray.Length > 0)
    223         {
    224             string kpiParentNo = drArray[0]["KpiParentNo"].ToString();
    225             double kpino_KpiWeight = Convert.ToDouble(drArray[0]["KpiWeight"]);
    226             drArray = dt.Select("KpiParentNo='" + kpiParentNo + "'");
    227             if (drArray.Length > 0)
    228             {
    229                 double result = 0;
    230                 foreach (DataRow row in drArray)
    231                 {
    232                     result += Convert.ToDouble(row["KpiWeight"]);
    233                 }
    234                 kpiWeight = (kpino_KpiWeight / result);
    235             }
    236         }
    237         return kpiWeight;
    238     }
    239     private double GetKpiValue(DataTable dt, string kpino)
    240     {
    241         var drArray = dt.Select(string.Format("kpino='{0}'",kpino));
    242         if (drArray.Length>0)
    243         {
    244             return Convert.ToDouble(drArray[0]["KpiValue1"]);
    245         }
    246         return 0;
    247     }
    248     private string GetKpiDes(DataTable dt, string kpino)
    249     {
    250         string des = string.Empty;
    251         var drArray = dt.Select(string.Format("kpino='{0}'",kpino));
    252         if (drArray.Length>0)
    253         {
    254             string KpiMethod = drArray[0]["KpiMethod"].ToString();
    255             string KpiSampleType = drArray[0]["KpiSampleType"].ToString();
    256             string KpiRule = drArray[0]["KpiRule"].ToString();
    257             string KpiCriterion = drArray[0]["KpiCriterion"].ToString();
    258             string KpiAreaRule = drArray[0]["KpiAreaRule"].ToString();
    259             string KpiSampleRule = drArray[0]["KpiSampleRule"].ToString();
    260 
    261             //表格样式
    262             if (!string.IsNullOrEmpty(KpiMethod))
    263             {
    264                 //des += "<table id='kpitabledes'>";
    265                 //des += "<tr><td>计算方法:</td><td>" + KpiMethod     +"</td></tr>";
    266                 //des += "<tr><td>采样类别:</td><td>" + KpiSampleType + "</td></tr>";
    267                 //des += "<tr><td>评价标准:</td><td>" + KpiRule + "</td></tr>";
    268                 //des += "<tr><td>规范要点:</td><td>" + KpiCriterion + "</td></tr>";
    269                 //des += "<tr><td>测区规则:</td><td>" + KpiAreaRule + "</td></tr>";
    270                 //des += "<tr><td>测点规则:</td><td>" + KpiSampleRule + "</td></tr>";
    271                 //des += "</table>";
    272             }
    273                                      
    274             //换行样式               
    275             //if (!string.IsNullOrEmpty(KpiMethod)) { des += "<br />计算方法:" + KpiMethod; }
    276             //if (!string.IsNullOrEmpty(KpiSampleType)) { des += "<br />采样类别:" + KpiSampleType; }
    277             //if (!string.IsNullOrEmpty(KpiRule)) { des += "<br />评价标准:" + KpiRule; }
    278             //if (!string.IsNullOrEmpty(KpiCriterion)) { des += "<br />规范要点:" + KpiCriterion; }
    279             //if (!string.IsNullOrEmpty(KpiAreaRule)) { des += "<br />测区规则:" + KpiAreaRule; }
    280             //if (!string.IsNullOrEmpty(KpiSampleRule)) { des += "<br />测点规则:" + KpiSampleRule; } 
    281         }
    282         return des;
    283     }
    284 
    285 
    286 
    287     
    288 }
    View Code

    以及需要用到的表(sql脚本):

      1 USE [Evaluation]
      2 GO
      3 /****** Object:  Table [dbo].[Kpi]    Script Date: 2016/3/25 16:06:04 ******/
      4 SET ANSI_NULLS ON
      5 GO
      6 SET QUOTED_IDENTIFIER ON
      7 GO
      8 CREATE TABLE [dbo].[Kpi](
      9     [KpiNo] [nvarchar](50) NOT NULL,
     10     [KpiName] [nvarchar](50) NULL,
     11     [KpiInfo] [nvarchar](100) NULL,
     12     [KpiParentNo] [nvarchar](50) NULL,
     13     [KpiMethod] [nvarchar](50) NULL,
     14     [KpiWeight] [decimal](18, 2) NULL,
     15     [KpiRule] [nvarchar](100) NULL,
     16     [KpiCriterion] [nvarchar](100) NULL,
     17     [KpiAreaRule] [nvarchar](100) NULL,
     18     [KpiSampleRule] [nvarchar](100) NULL,
     19     [KpiAreaNum] [int] NOT NULL,
     20     [KpiSampleNum] [int] NOT NULL,
     21     [KpiMinValue] [decimal](18, 2) NULL,
     22     [KpiMaxValue] [decimal](18, 2) NULL,
     23     [KpiOffset] [decimal](18, 2) NULL,
     24     [KpiReferenceVal] [decimal](18, 2) NULL,
     25     [KpiValueType] [nvarchar](50) NULL,
     26     [KpiFormula] [nvarchar](50) NULL,
     27     [KpiFormulaRule] [nvarchar](100) NULL,
     28     [KpiMemo] [nvarchar](100) NULL,
     29     [KpiGoodMinValue] [decimal](18, 2) NULL,
     30     [KpiGoodMaxValue] [decimal](18, 2) NULL,
     31     [KpiGoodMethod] [nvarchar](50) NULL,
     32     [KpiGoodOffset] [decimal](18, 2) NULL,
     33     [KpiSampleType] [nvarchar](50) NULL,
     34     [IsDLT] [smallint] NULL,
     35     [CrtDate] [datetime] NULL,
     36     [CrtUser] [nvarchar](50) NULL,
     37     [UpdDate] [datetime] NULL,
     38     [UpdUser] [nvarchar](50) NULL,
     39  CONSTRAINT [PK_EVKpiInfo] PRIMARY KEY CLUSTERED 
     40 (
     41     [KpiNo] ASC
     42 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
     43 ) ON [PRIMARY]
     44 
     45 GO
     46 /****** Object:  Table [dbo].[kpi1447055501128]    Script Date: 2016/3/25 16:06:04 ******/
     47 SET ANSI_NULLS ON
     48 GO
     49 SET QUOTED_IDENTIFIER ON
     50 GO
     51 CREATE TABLE [dbo].[kpi1447055501128](
     52     [KpiNo] [nvarchar](50) NOT NULL,
     53     [KpiName] [nvarchar](50) NULL,
     54     [KpiInfo] [nvarchar](100) NULL,
     55     [KpiParentNo] [nvarchar](50) NULL,
     56     [KpiMethod] [nvarchar](50) NULL,
     57     [KpiWeight] [decimal](18, 2) NULL,
     58     [KpiRule] [nvarchar](100) NULL,
     59     [KpiCriterion] [nvarchar](100) NULL,
     60     [KpiAreaRule] [nvarchar](100) NULL,
     61     [KpiSampleRule] [nvarchar](100) NULL,
     62     [KpiAreaNum] [int] NOT NULL,
     63     [KpiSampleNum] [int] NOT NULL,
     64     [KpiMinValue] [decimal](18, 2) NULL,
     65     [KpiMaxValue] [decimal](18, 2) NULL,
     66     [KpiOffset] [decimal](18, 2) NULL,
     67     [KpiReferenceVal] [decimal](18, 2) NULL,
     68     [KpiValueType] [nvarchar](50) NULL,
     69     [KpiFormula] [nvarchar](50) NULL,
     70     [KpiFormulaRule] [nvarchar](100) NULL,
     71     [KpiMemo] [nvarchar](100) NULL,
     72     [KpiGoodMinValue] [decimal](18, 2) NULL,
     73     [KpiGoodMaxValue] [decimal](18, 2) NULL,
     74     [KpiGoodMethod] [nvarchar](50) NULL,
     75     [KpiGoodOffset] [decimal](18, 2) NULL,
     76     [KpiSampleType] [nvarchar](50) NULL
     77 ) ON [PRIMARY]
     78 
     79 GO
     80 /****** Object:  Table [dbo].[kpi20150002]    Script Date: 2016/3/25 16:06:04 ******/
     81 SET ANSI_NULLS ON
     82 GO
     83 SET QUOTED_IDENTIFIER ON
     84 GO
     85 CREATE TABLE [dbo].[kpi20150002](
     86     [KpiNo] [nvarchar](50) NOT NULL,
     87     [KpiName] [nvarchar](50) NULL,
     88     [KpiInfo] [nvarchar](100) NULL,
     89     [KpiParentNo] [nvarchar](50) NULL,
     90     [KpiMethod] [nvarchar](50) NULL,
     91     [KpiWeight] [decimal](18, 2) NULL,
     92     [KpiRule] [nvarchar](100) NULL,
     93     [KpiCriterion] [nvarchar](100) NULL,
     94     [KpiAreaRule] [nvarchar](100) NULL,
     95     [KpiSampleRule] [nvarchar](100) NULL,
     96     [KpiAreaNum] [int] NOT NULL,
     97     [KpiSampleNum] [int] NOT NULL,
     98     [KpiMinValue] [decimal](18, 2) NULL,
     99     [KpiMaxValue] [decimal](18, 2) NULL,
    100     [KpiOffset] [decimal](18, 2) NULL,
    101     [KpiReferenceVal] [decimal](18, 2) NULL,
    102     [KpiValueType] [nvarchar](50) NULL,
    103     [KpiFormula] [nvarchar](50) NULL,
    104     [KpiFormulaRule] [nvarchar](100) NULL,
    105     [KpiMemo] [nvarchar](100) NULL,
    106     [KpiGoodMinValue] [decimal](18, 2) NULL,
    107     [KpiGoodMaxValue] [decimal](18, 2) NULL,
    108     [KpiGoodMethod] [nvarchar](50) NULL,
    109     [KpiGoodOffset] [decimal](18, 2) NULL,
    110     [KpiSampleType] [nvarchar](50) NULL
    111 ) ON [PRIMARY]
    112 
    113 GO
    114 /****** Object:  Table [dbo].[KpiTree]    Script Date: 2016/3/25 16:06:04 ******/
    115 SET ANSI_NULLS ON
    116 GO
    117 SET QUOTED_IDENTIFIER ON
    118 GO
    119 CREATE TABLE [dbo].[KpiTree](
    120     [KpiNo] [nvarchar](50) NOT NULL,
    121     [KpiName] [nvarchar](50) NULL,
    122     [KpiInfo] [nvarchar](50) NULL,
    123     [KpiParentNo] [nvarchar](50) NULL,
    124     [KpiCollectMethod] [nvarchar](50) NULL,
    125     [KpiWeight] [decimal](18, 2) NULL,
    126     [KpiMemo] [nvarchar](100) NULL,
    127     [KpiIndex] [int] NULL,
    128     [IsDLT] [smallint] NULL,
    129     [CrtDate] [datetime] NULL,
    130     [CrtUser] [nvarchar](50) NULL,
    131     [UpdDate] [datetime] NULL,
    132     [UpdUser] [nvarchar](50) NULL,
    133  CONSTRAINT [PK_KpiTree] PRIMARY KEY CLUSTERED 
    134 (
    135     [KpiNo] ASC
    136 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    137 ) ON [PRIMARY]
    138 
    139 GO
    140 /****** Object:  Table [dbo].[kpitree1447055501128]    Script Date: 2016/3/25 16:06:04 ******/
    141 SET ANSI_NULLS ON
    142 GO
    143 SET QUOTED_IDENTIFIER ON
    144 GO
    145 CREATE TABLE [dbo].[kpitree1447055501128](
    146     [KpiNo] [nvarchar](50) NOT NULL,
    147     [KpiName] [nvarchar](50) NULL,
    148     [KpiInfo] [nvarchar](50) NULL,
    149     [KpiParentNo] [nvarchar](50) NULL,
    150     [KpiCollectMethod] [nvarchar](50) NULL,
    151     [KpiWeight] [decimal](18, 2) NULL,
    152     [KpiMemo] [nvarchar](100) NULL,
    153     [KpiIndex] [int] NULL
    154 ) ON [PRIMARY]
    155 
    156 GO
    157 /****** Object:  Table [dbo].[KpiTree20150002]    Script Date: 2016/3/25 16:06:04 ******/
    158 SET ANSI_NULLS ON
    159 GO
    160 SET QUOTED_IDENTIFIER ON
    161 GO
    162 CREATE TABLE [dbo].[KpiTree20150002](
    163     [KpiNo] [nvarchar](50) NOT NULL,
    164     [KpiName] [nvarchar](50) NULL,
    165     [KpiInfo] [nvarchar](50) NULL,
    166     [KpiParentNo] [nvarchar](50) NULL,
    167     [KpiCollectMethod] [nvarchar](50) NULL,
    168     [KpiWeight] [decimal](18, 2) NULL,
    169     [KpiMemo] [nvarchar](100) NULL,
    170     [KpiIndex] [int] NULL
    171 ) ON [PRIMARY]
    172 
    173 GO
    174 /****** Object:  Table [dbo].[KpiValue]    Script Date: 2016/3/25 16:06:04 ******/
    175 SET ANSI_NULLS ON
    176 GO
    177 SET QUOTED_IDENTIFIER ON
    178 GO
    179 CREATE TABLE [dbo].[KpiValue](
    180     [TenderNo] [nvarchar](50) NOT NULL,
    181     [KpiNo] [nvarchar](50) NOT NULL,
    182     [KpiValue1] [decimal](18, 2) NULL,
    183     [KpiValue2] [decimal](18, 2) NULL,
    184     [SampleNumAll] [int] NULL,
    185     [SampleNum1] [int] NULL,
    186     [SampleNum2] [int] NULL
    187 ) ON [PRIMARY]
    188 
    189 GO
    190 /****** Object:  Table [dbo].[KpiValue1447055501128]    Script Date: 2016/3/25 16:06:04 ******/
    191 SET ANSI_NULLS ON
    192 GO
    193 SET QUOTED_IDENTIFIER ON
    194 GO
    195 CREATE TABLE [dbo].[KpiValue1447055501128](
    196     [TenderNo] [nvarchar](50) NOT NULL,
    197     [KpiNo] [nvarchar](50) NOT NULL,
    198     [KpiValue1] [decimal](18, 2) NULL,
    199     [KpiValue2] [decimal](18, 2) NULL,
    200     [SampleNumAll] [int] NULL,
    201     [SampleNum1] [int] NULL,
    202     [SampleNum2] [int] NULL
    203 ) ON [PRIMARY]
    204 
    205 GO
    206 /****** Object:  Table [dbo].[KpiValue20150002]    Script Date: 2016/3/25 16:06:04 ******/
    207 SET ANSI_NULLS ON
    208 GO
    209 SET QUOTED_IDENTIFIER ON
    210 GO
    211 CREATE TABLE [dbo].[KpiValue20150002](
    212     [TenderNo] [nvarchar](50) NOT NULL,
    213     [KpiNo] [nvarchar](50) NOT NULL,
    214     [KpiValue1] [decimal](18, 2) NULL,
    215     [KpiValue2] [decimal](18, 2) NULL,
    216     [SampleNumAll] [int] NULL,
    217     [SampleNum1] [int] NULL,
    218     [SampleNum2] [int] NULL
    219 ) ON [PRIMARY]
    220 
    221 GO
    222 ALTER TABLE [dbo].[Kpi] ADD  CONSTRAINT [DF_Kpi_KpiWeight]  DEFAULT ((1)) FOR [KpiWeight]
    223 GO
    224 ALTER TABLE [dbo].[Kpi] ADD  CONSTRAINT [DF_Kpi_KpiAreaNum]  DEFAULT ((2)) FOR [KpiAreaNum]
    225 GO
    226 ALTER TABLE [dbo].[Kpi] ADD  CONSTRAINT [DF_Kpi_KpiSampleNum]  DEFAULT ((10)) FOR [KpiSampleNum]
    227 GO
    228 ALTER TABLE [dbo].[Kpi] ADD  CONSTRAINT [DF_Kpi_IsDLT]  DEFAULT ((0)) FOR [IsDLT]
    229 GO
    230 ALTER TABLE [dbo].[kpi20150002] ADD  CONSTRAINT [DF_kpi20150002_KpiWeight]  DEFAULT ((1)) FOR [KpiWeight]
    231 GO
    232 ALTER TABLE [dbo].[KpiTree] ADD  CONSTRAINT [DF_KpiTree_KpiWeight]  DEFAULT ((1)) FOR [KpiWeight]
    233 GO
    234 ALTER TABLE [dbo].[KpiTree] ADD  CONSTRAINT [DF_KpiTree_IsDLT]  DEFAULT ((0)) FOR [IsDLT]
    235 GO
    236 ALTER TABLE [dbo].[KpiTree20150002] ADD  CONSTRAINT [DF_KpiTree20150002_KpiWeight]  DEFAULT ((1)) FOR [KpiWeight]
    237 GO
    238 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'指标编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Kpi', @level2type=N'COLUMN',@level2name=N'KpiNo'
    239 GO
    240 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'指标名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Kpi', @level2type=N'COLUMN',@level2name=N'KpiName'
    241 GO
    242 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'上级指标编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Kpi', @level2type=N'COLUMN',@level2name=N'KpiParentNo'
    243 GO
    244 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'权重' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Kpi', @level2type=N'COLUMN',@level2name=N'KpiWeight'
    245 GO
    246 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'上级指标编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Kpi', @level2type=N'COLUMN',@level2name=N'KpiRule'
    247 GO
    248 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'权重' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Kpi', @level2type=N'COLUMN',@level2name=N'KpiCriterion'
    249 GO
    250 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'指标配置表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Kpi'
    251 GO
    View Code

     

    转载于:https://www.cnblogs.com/wyfblog/p/5319873.html

    展开全文
  • 所以对于像EXCEL表格类型的二维表转化为一维表再导入数据库处理就显得非常重要了。 什么叫二维表、什么叫一维表。这个可以自行百度一下进行处理吧。 转换方式: 打开EXCEL2016、按Alt+D 然后Alt+P 进入excel...
    	有时候需要利用EXCEL将整理好的数据导入数据库进行自动化处理。
    	但是关系型数据库对基础数据表的需求或者响应对一维更加友好。所以对于像EXCEL表格类型的二维表转化为一维表再导入数据库处理就显得非常重要了。
    	什么叫二维表、什么叫一维表。这个可以自行百度一下进行处理吧。
    
    	转换的方式:
    			打开EXCEL2016、按Alt+D  然后Alt+P  进入excel透视表的选项。
    			然后选择![在这里插入图片描述](https://img-blog.csdnimg.cn/2019012115103365.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDQwNDUyOQ==,size_16,color_FFFFFF,t_70)
    			选择多重合并计算区域。然后下一步、下一步、到选择数据的区域、生成数据表格(这些的选择都和数据透视表的操作一直)。当生成数据表格之后。 选择表格数据的右下角的最后一个数据。行列的总计。双击。就会自动跳出二维数据表转一维数据的成品表了。这个时候再进行其他相应的操作就会显得方便了。
    
    展开全文
  • Visual C++6.0画三立体图形

    千次阅读 2019-07-22 16:33:19
    在画三立体图之前,主要是先要找到维和三维的对应关系,这是转化的关键。 关键代码如下: S[i].x=P[i][1]+sqrt(2)/3.0*(-P[i][0]); S[i].y=P[i][2]+sqrt(2)/3.0*(-P[i][0]); 一、建立边结构,在同一屏幕...

    在画三维立体图之前,主要是先要找到二维和三维的对应关系,这是转化的关键。
    关键代码如下:

    			S[i].x=P[i][1]+sqrt(2)/3.0*(-P[i][0]);
    			S[i].y=P[i][2]+sqrt(2)/3.0*(-P[i][0]);
    

    一、建立边表结构,在同一屏幕上完成三视图和正等轴测投影图

    //消隐之前
    //编译环境:Visual C++ 6.0,EasyX_20190219(beta)
    #include<graphics.h>
    #include<conio.h>
    #include<math.h>
    #define max 50
    #include<iostream>
    #include<math.h>
    using namespace std;
    
    #define pi 3.14159
    using namespace std;
    double ja=35.3;//54.7
    double rad=(double)ja*pi/(double)180.0;
    double Dpoint[][4]={
    	{0,0,84,1},{110,0,84,1},{110,0,20,1},{140,0,20,1},
    	{140,0,0,1},{140,80,0,1},{0,80,0,1},{0,80,54,1},
    	{0,60,54,1},{0,60,84,1},{20,60,84,1},{20,20,84,1},
    	{110,20,84,1},{110,20,20,1},{60,20,20,1},{60,80,20,1},
    	{40,80,54,1},{40,60,54,1},{140,80,20,1},{0,0,0,1}
    };
    
    //下标从0开始
    int ring[]={
    	0,1,12,11,10,9,//0-5
    	2,3,18,15,14,13,//6-11
    	8,17,16,17,//12-15
    	1,2,13,12,//16-19
    	3,4,5,18,//20-23
    	11,14,15,16,17,10,//24-29
    	11,12,13,14,//30-33
    	15,18,5,6,7,16,//34-39
    	9,10,17,8,//40-43
    	0,9,8,7,6,19,//44-49
    	0,19,4,3,2,1,//50-55
    	4,19,6,5//56-59
    };
    //构成面的顶点
    int surface[12][2]={
    	{0,5},{6,11},{12,15},{16,19},{20,23},{24,29},
    	{30,33},{34,39},{40,43},{44,49},{50,55},{56,59}
    };
    //主视图
    int XOZ_ring[]={
    	1,2,14,10,
    	0,7,16,10,
    	3,15,17,7,6,4
    };
    int XOZ_surface[3][2]={
    	{0,3},{4,7},{8,13}
    };
    //侧视图
    int YOZ_ring[]={
    	0,2,13,12,
    	11,10,8,7,15,13,
    	3,4,5,15
    };
    int YOZ_surface[3][2]={
    	{0,3},{4,9},{10,13}
    };
    //俯视图
    int XOY_ring[]={
    	2,0,9,10,11,12,
    	3,5,15,14,12,2,
    	14,15,16,17,10,11,
    	16,7,9,17
    };
    int XOY_surface[4][2]={
    	{0,5},{6,11},{12,17},{18,21}
    };
    
    //正等轴投影
    int XYZ_ring[]={
    	3,4,5,18,
    	5,6,7,16,15,18,
    	2,3,18,15,14,13,
    	1,2,13,12,
    	11,12,13,14,
    	10,11,14,15,16,17,
    	7,8,17,16,
    	8,9,10,17,
    	0,1,12,11,10,9
    };
    int XYZ_surface[9][2]={
    	{0,3},{4,9},{10,15},{16,19},{20,23},{24,29},{30,33},{34,37},{38,43}
    };
    
    //三维坐标转换为右手坐标系的二维坐标
    void transfer(double P[max][4], int n, POINT S[])
    {
    	int i,j;
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<3;j++)
    		{
    			S[i].x=P[i][1]+sqrt(2)/3.0*(-P[i][0]);
    			S[i].y=P[i][2]+sqrt(2)/3.0*(-P[i][0]);
    		}		
    	}
    }
    //主视图:XOZ面的投影变换,将Z的值给二维坐标的y
    void XOZ_Projection(double P[max][4], int n, POINT S[])
    {
    	double T[max][4];//新生成的投影面上的点
    	int i,j,k;
    	int TV[4][4]={ {1,0,0,0},{0,0,0,0},{0,0,1,0},{0,0,0,1} };
    	for(i=0;i<n;i++)
    	{		
    		for(j=0;j<4;j++)
    		{   T[i][j]=0;
    			for(k=0;k<4;k++)
    			{T[i][j]+=P[i][k]*TV[k][j];}
    		} 
    	}
    	for(i=0;i<n;i++)
    	{
    		S[i].x=T[i][0];
    		S[i].y=T[i][2];
    	}
    }
    
    //侧视图:YOZ面的投影变换,将y的值给二维坐标的x, z的值给二维坐标的y
    void YOZ_Projection(double P[max][4], int n, POINT S[])
    {
    	double T[max][4];//新生成的投影面上的点
    	int i,j,k;
    	int TW[4][4]={ {0,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1} };
    	for(i=0;i<n;i++)
    	{		
    		for(j=0;j<4;j++)
    		{   T[i][j]=0;
    			for(k=0;k<4;k++)
    			{T[i][j]+=P[i][k]*TW[k][j];}
    		}
    	}
    	for(i=0;i<n;i++)
    	{
    		S[i].x=T[i][1];
    		S[i].y=T[i][2];
    	}
    }
    
    //俯视图:XOY面的投影变换,将y的值给二维坐标的y, x的值给二维坐标的x
    void XOY_Projection(double P[max][4], int n, POINT S[])
    {
    	double T[max][4];//新生成的投影面上的点
    	int i,j,k;
    	int TH[4][4]={ {1,0,0,0},{0,1,0,0},{0,0,0,0},{0,0,0,1} };
    	for(i=0;i<n;i++)
    	{		
    		for(j=0;j<4;j++)
    		{   T[i][j]=0;
    			for(k=0;k<4;k++)
    			{T[i][j]+=P[i][k]*TH[k][j];}
    		}
    	}
    	for(i=0;i<n;i++)
    	{
    		S[i].x=T[i][0];
    		S[i].y=T[i][1];
    	}
    }
    
    //正等轴投影图:绕Z轴正向旋转α角 ,再绕X轴反向旋转β角,将三维形体向XOZ平面作正投影得到正轴测投影的投影变换矩阵 
    //三维形体向XOZ平面作正投影,将Z的值给二维坐标的y
    void XYZ_Projection(double P[max][4], int n, POINT S[])
    {
    	double T[max][4];//新生成的投影面上的点
    	int i,j,k;
    	double TT[4][4]={
    		{cos(rad),0,-sin(rad)*sin(rad),0},
    		{-sin(rad),0,-cos(rad)*sin(rad),0},
    		{0,0,cos(rad),0},
    		{0,0,0,1}
    	};
    	for(i=0;i<n;i++)
    	{	
    		for(j=0;j<4;j++)
    		{   T[i][j]=0;
    			for(k=0;k<4;k++)
    			{T[i][j]+=P[i][k]*TT[k][j];}
    		}
    	}
    	for(i=0;i<n;i++)
    	{
    		S[i].x=T[i][0];
    		S[i].y=T[i][2];
    	}
    }
    
    
    int main()
    {
    	initgraph(800,550);
    	setorigin(220,350);
    	setaspectratio(1,-1);
    	
    	line(0,0,180,0);
    	line(0,0,0,120);
    	line(0,0,-95,-95);
    	int i,j,index,k;
    	POINT points[20];
    	POINT points1[10];
    	setcolor(RED);
    	transfer(Dpoint,20,points);
    //画三维立体图
    for(i=0;i<12;i++){
        k=0;
    	for(j=surface[i][0];j<=surface[i][1];j++)
    	{
    		index=ring[j];
    		points1[k].x=points[index].x;
    		points1[k].y=points[index].y;
    		k++;
    	}
    	polygon(points1,k);
    }
    setcolor(YELLOW);
    //画主视图
    XOZ_Projection(Dpoint,20,points);	
    for(i=0;i<3;i++){//3个面
        k=0;
    	for(j=XOZ_surface[i][0];j<=XOZ_surface[i][1];j++)
    	{
    		index=XOZ_ring[j];
    		points1[k].x=-points[index].x;
    		points1[k].y=points[index].y+230;
    		k++;
    	}
    	polygon(points1,k);
    }
    
    //侧视图
    YOZ_Projection(Dpoint,20,points);	
    for(i=0;i<3;i++){//3个面
        k=0;
    	for(j=YOZ_surface[i][0];j<=YOZ_surface[i][1];j++)
    	{
    		index=YOZ_ring[j];
    		points1[k].x=points[index].x+20;
    		points1[k].y=points[index].y+230;
    		k++;
    	}
    	polygon(points1,k);
    }
    
    //俯视图
    XOY_Projection(Dpoint,20,points);	
    for(i=0;i<4;i++){//4个面
        k=0;
    	for(j=XOY_surface[i][0];j<=XOY_surface[i][1];j++)
    	{
    		index=XOY_ring[j];
    		points1[k].x=-points[index].x;
    		points1[k].y=-points[index].y+210;
    		k++;
    	}
    	polygon(points1,k);
    }
    //正等轴投影图
    XYZ_Projection(Dpoint,20,points);	
    for(i=0;i<12;i++){
        k=0;
    	for(j=surface[i][0];j<=surface[i][1];j++)
    	{
    		index=ring[j];
    		points1[k].x=-points[index].x+250;
    		points1[k].y=-(-points[index].y+100)+200;
    		k++;
    	}
    	polygon(points1,k);
    }
    	_getch();
    	closegraph();
    	return 0;
    }
    
    

    效果演示:
    在这里插入图片描述
    二、给定点的三维坐标值,建立面表、环表、顶点表三表结构,画出三维物体的消隐图

    //消隐之后 
    //编译环境:Visual C++ 6.0,EasyX_20190219(beta)
    #include<graphics.h>
    #include<conio.h>
    #include<math.h>
    #define max 50
    #include<iostream>
    #include<math.h>
    using namespace std;
    #define pi 3.14159
    using namespace std;
    double ja=35.3;//54.7
    double rad=(double)ja*pi/(double)180.0;
    double Dpoint[][4]={
    	{0,0,84,1},{110,0,84,1},{110,0,20,1},{140,0,20,1},
    	{140,0,0,1},{140,80,0,1},{0,80,0,1},{0,80,54,1},
    	{0,60,54,1},{0,60,84,1},{20,60,84,1},{20,20,84,1},
    	{110,20,84,1},{110,20,20,1},{60,20,20,1},{60,80,20,1},
    	{40,80,54,1},{40,60,54,1},{140,80,20,1},{0,0,0,1}
    };
    
    //下标从0开始
    int ring[]={
    	0,1,12,11,10,9,//0-5
    	2,3,18,15,14,13,//6-11
    	8,17,16,17,//12-15
    	1,2,13,12,//16-19
    	3,4,5,18,//20-23
    	11,14,15,16,17,10,//24-29
    	11,12,13,14,//30-33
    	15,18,5,6,7,16,//34-39
    	9,10,17,8,//40-43
    	0,9,8,7,6,19,//44-49
    	0,19,4,3,2,1,//50-55
    	4,19,6,5//56-59
    };
    //构成面的顶点
    int surface[12][2]={
    	{0,5},{6,11},{12,15},{16,19},{20,23},{24,29},
    	{30,33},{34,39},{40,43},{44,49},{50,55},{56,59}
    };
    
    //消影
    int ring1[]={
    	3,4,5,18,
    	5,6,7,16,15,18,
    	2,3,18,15,14,13,
    	1,2,13,12,
    	11,12,13,14,
    	10,11,14,15,16,17,
    	7,8,17,16,
    	8,9,10,17,
    	0,1,12,11,10,9
    };
    int surface1[9][2]={
    	{0,3},{4,9},{10,15},{16,19},{20,23},{24,29},{30,33},{34,37},{38,43}
    };
    
    //三维坐标转换为右手坐标系的二维坐标
    void transfer(double P[max][4], int n, POINT S[]){
    	int i,j;
    	for(i=0;i<n;i++){
    		for(j=0;j<3;j++){
    			S[i].x=P[i][1]+sqrt(2)/3.0*(-P[i][0]);
    			S[i].y=P[i][2]+sqrt(2)/3.0*(-P[i][0]);
    		}		
    	}
    }
    
    //正等轴投影图
    void XYZ_Projection(double P[max][4], int n, POINT S[]){
    	double T[max][4];//新生成的投影面上的点
    	int i,j,k;
    	double TT[4][4]={
    		{cos(rad),0,-sin(rad)*sin(rad),0},
    		{-sin(rad),0,-cos(rad)*sin(rad),0},
    		{0,0,cos(rad),0},
    		{0,0,0,1}
    	};
    	for(i=0;i<n;i++){	
    		for(j=0;j<4;j++){   
    			T[i][j]=0;
    			for(k=0;k<4;k++)
    			{T[i][j]+=P[i][k]*TT[k][j];}
    		}
    	}
    	for(i=0;i<n;i++){
    		S[i].x=T[i][0];
    		S[i].y=T[i][2];
    	}
    }
    
    int main()
    {
    	initgraph(800,550);
    	setorigin(220,350);
    	setaspectratio(1,-1);
    	line(0,0,180,0);
    	line(0,0,0,120);
    	line(0,0,-95,-95);
    
    	int i,j,index,k;
    	POINT points[20];
    	POINT points1[10];
    	setcolor(RED);
    	transfer(Dpoint,20,points);
    //未消影之前的三维立体图
    for(i=0;i<12;i++){
        k=0;
    	for(j=surface[i][0];j<=surface[i][1];j++){
    		index=ring[j];
    		points1[k].x=points[index].x;
    		points1[k].y=points[index].y;
    		k++;
    	}
    	polygon(points1,k);
    }
    //画三维立体消影图
    setcolor(YELLOW);
    for(i=0;i<9;i++){
        k=0;
    	for(j=surface1[i][0];j<=surface1[i][1];j++){
    		index=ring1[j];
    		points1[k].x=points[index].x+250;
    		points1[k].y=points[index].y;
    		k++;
    	}
    	polygon(points1,k);
    }
    setcolor(BLUE);
    //正等轴投影图
    XYZ_Projection(Dpoint,20,points);	
    for(i=0;i<9;i++){
        k=0;
    	for(j=surface1[i][0];j<=surface1[i][1];j++){
    		index=ring1[j];
    		points1[k].x=-points[index].x+200;
    		points1[k].y=-(-points[index].y+100)+300;
    		k++;
    	}
    	polygon(points1,k);
    }
    	_getch();
    	closegraph();
    	return 0;
    }
    
    

    效果演示:
    在这里插入图片描述
    红色为原图,黄色为消影之后的三维立体图,蓝色为消影后的正等轴侧投影图。

    展开全文
  • 【1】关系:即我们脑子里面一张二维表 【2】元组:某一行数据 【3】域:某一列数据子集 【4】关系模型:R(A1,A2,A3...)R(A_1,A_2,A_3...)R(A1​,A2​,A3​...) 关系代数在数据库里面作用就相当于把我们在 ...
  • 土地利用转移矩阵几种实现方法

    万次阅读 多人点赞 2018-05-29 09:11:07
    查阅相关资料,也没有得到土地利用类型转换矩阵确切定义,我理解为不同时间段内同一区域内土地利用类型相互转换关系,一般用二维表来表达,从二维表中可以快速查看各个地类间相互转化的具体情况。比如某一类别...
  • 使用二维矩阵存储节点关系, * 2. 使用回溯法; * 3. 该算法时间复杂度过高,对于num==2000测试用例,会超时,因此对num==2000时候,进行撞大运。 * */ bool find(int num, int **parr, int pm, int pn, ...
  • 是D上的关系,它反映了数据元素之间前后件关系,通常记为R。一个数据结构可以表示成:B=(D,R) 其中,B表示数据结构。为了反映D中各数据元素之间前后件关系,一般用二元组来表示。 例如,如果把一年四季看作一...
  • 国标规定圆弧齿轮基本齿廓为基本齿条法截面齿廓,在现有圆弧齿轮...针对这一问题,通过分析齿廓线、节线与节圆几何关系,运用几何分析法,将节线上齿廓转化到节圆上,给出了端面圆弧齿轮的二维建模具体方法。
  • 影像信息提取之-----混淆矩阵计算

    千次阅读 2015-10-15 19:58:43
    查阅相关资料,也没有得到土地利用类型转换矩阵确切定义,我们理解为不同时间段内同一区域内土地利用类型相互转换关系,其实本质就是遥感动态监测中分类后比较方法,一般用二维表和图像来表达: l  二维表 ...
  • 栅线投影三维测量中通过标定技术把二维的相位信息转化为高度信息,提出了一种基于双参考平面等相位坐标标定方法。该方法利用被测物体上相位和两个参考平面上相位相同位置坐标,通过线性插值得到物体表面高度,...
  • 数据库设计步骤

    2020-02-27 22:08:06
    二维表的形式表示实体和实体间联系的数据模型即关系模式 E-R图转换为关系模式的步骤 把每个实体都转化关系模式R(U)形式 建立实体间联系的转换 二、将E-R图转换为实体关系模型 将各实体转换为对应的表,将各...
  • 给定一个无向图,给定一些被占领点, 要你判断最后这个图中所有点是不是都被孤立。 ... G[maxn]邻接存储图的关系, 效率比二维数组高,而且本题数据量10000较大, 用二维数组查找起来也不方.
  • 地球椭球体表面是个曲面,而地图通常是二维平面,因此在地图制图时首先要考虑把三维球面转化二维的平面。 把地面上事物位置表达在二维平面上有多种方法,古代风景绘画、现代摄影技术均可以在一定程度上...
  • 二维表的形式表示实体与实体间关系的数据模型称为关系模型。关系数据库模式是对关系数据库结构的描述,或者说是对关系数据库框架的描述。一个关系通常对应一张表。 一般情况下,我们把关系模式表示为 R(U) 或 R(A,...
  • 转化二维表进行存储,存储介质是磁盘 产品代表: 大型:Oracle、DB2 中型:SQLServer、MYSQL 小型:Access、SQLite 解决问题主要是:数据有效管理和持久化存储 非关系型数据库:不采用关系模型数据库 ...
  • 以集合理论为基础,实现为具有行和列的二维表; 使用结构化查询语言编写查询; 表可以连接并转化为新、更复杂表。 键值型数据库:Riak & Redis 类似于映射(哈希表)。 多列型数据库:HBase 一个给定...
  • 初学数据库使用优化

    2018-12-23 15:59:13
    需求分析 了解系统中所要存储数据 了解数据存储特点 了解数据生命周期 ...实体及实体之间的关系(1对多,1对1,多对多)、 实体所包含属性、 ...1. 第一范式:数据库中表都是二维表 ...
  • 3. 设计出详细逻辑数据库结构,将各个实体和联系转化为相应的二维表关系模式,指定各个关系的主关键字和外部关键字,并对各个关系的约束加以限定 4. 通过企业管理器或是查询分析器实现各个二维关系(建议最好...
  • 数据库设计

    2020-02-27 18:52:33
    1.用二维的表象形式表示实体和实体之间联系数据模式即关系模式 2.E-R图转换关系模式步骤 把每个实体都转化关系模式R(U)形式 建立实体间联系转换 三、第一范式 第一范式目标是确保每列原子性 如果每...
  • 确定了动态规划这三要素,整个求解过程就可以用一个最优决策表来描述,最优决策表是一个二维表,其中行表示决策阶段,列表示问题状态,表格需要填写数据一般对应此问题在某个阶段某个状态下最优值(如...
  • POJ-2481 Cows

    2019-09-29 20:59:56
    但实际上一维包含关系,可以转化二维的位置关系。对于区间[x1,y1]与[x2,y2],如果[x1,y1]是[x2,y2]真子区间,那么x1>x2,y1<y2,可知(x2,y2)这个点在(x1,y1)左上方。那么求某个点某个方向有多少个点...
  • 3.4 凸区域的二维参数化线段裁剪 144 3.5 Cyrus-Beck算法 148 3.5.1 部分可见线段 150 3.5.2 完全可见线段 151 3.5.3 完全不可见线段 151 3.5.4 Cyrus-Beck算法形式化描述 153 3.5.5 非规则窗口 156 3.6 ...
  • 用你方式将你的二维表导入到sqlite(第一行列标题,第二行起一行一条数据)。源码上传1.源码上传:保持原有结构上传到网站即可直接使用,上传请注意编码(utf-8),具体可以看视频教程。数据上传1.上传方式:FTP...
  • UML学习笔记之序列图

    千次阅读 2015-10-25 15:06:49
    序列图定义: 交互是指在具体语境中由为实现某个目标一组对象之间进行交互一组消息所构成行为。 序列图就是交互图一种。序列图是对对象之间传送消息时间顺序...在UML中,序列图将交互关系表示为一个二维
  • 数据仓库中集成了企业几乎所有可以获取到数据以用于数据分析和决策支持。这些进入到数据仓库中数据无外... 这类数据格式非常规范,典型代表就是关系数据库中数据,这些数据可以用二维表来存储,有固定...
  • 表示人类造出词: (1)从语料中提取出含义表达。 (2)从文字到数值向量...绘制到一个二维空间中,希望保证向量空间相似度,即含义上相近词绘制到二维空间中之后仍然是相近。 词典:给每个不同词一个下标

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

关系二维表的转化