精华内容
下载资源
问答
  • 系列(一)表示与入度

    千次阅读 2019-08-18 20:11:21
    表示与入度 虽然好像没什么人看,但是我还是写一下,佛。就当给自己做一个备忘录好了!总算,进入到系列了。的部分,问题很多,算法很多,应用也很广。的两个比较重要的基石就是表示的遍历。...

    图的表示与入度

            虽然好像没什么人看,但是我还是写一下,佛系。就当给自己做一个备忘录好了!总算,进入到图系列了。图的部分,问题很多,算法很多,应用也很广。图的两个比较重要的基石就是图的表示和图的遍历。有了这两个才能更好地搭建其他的算法。

    图的表示

           我们知道G = (V, E),所以最原始的表示方式是,int n, int[][] edges。其中,n表示有n个节点,分别为{0, 1, 2, 3, ..., n-1},edges表示所有的边, edges = new int[n][2],edges[i]表示第i条边,而edges[i][0]表示起点,edges[i][1]表示终点。有关面向对象的思考: 其实可以把edges看作是一个对象数组, 每一个对象edge=edges[i], 是int[2], 包含了两个属性edge[0]和edge[1],实际上并不需要显式地进行class的定义。

    邻接链表法

            本来想直接做后面的题目,但是这些基础的操作没有定义好,做后面的题目会比较麻烦。好的,我们开始介绍邻接链表的使用吧。邻接链表每一个元素是每个点相邻的点组成的链表, 比如点0与1,2,3相邻,那么0的邻接链表就是{1, 2, 3}。 下面给出代码示例。

    class Solution {
        private List<Integer>[] adjs;
        public void func1(int n, int[][] edges) {
            adjs = new List[n]; // 数组初始化
            for (int i = 0 ; i < n ; i++) {
                adjs[i] = new LinkedList<>(); // 元素初始化
            }
            for (int i = 0; i < edges.length;i++) {
                int[] edge = edges[i];
                int from = edge[0];
                int to = edge[1];
                adjs[from].add(to); // 利用边元素进行初始化
                
                // 如果是无向图
                // adjs[to].add(from);
            }
        }
    }

           注意,上面使用的是LinkedList,原因是: 首先, 一般遍历的时候,都是逐个遍历的,并不需要按照下标来访问元素,因此使用数组和使用链表没有区别;其次, 给链表新增元素很容易。当然,如果你知道邻接的元素不超过一定数量m时,你可以使用int[n][m+1] adjs, 其中adjs[i][0]表示stackSize, 而ajds[i][1]~adjs[i][m]是一个stack。见leetcode题目:不邻接植花

           另外,如果需要给每条边加上weight,就需要使用对象了。

    class Solution {
        private List<Node>[] adjs;
        public void func1(int n, int[][] edges) {
            adjs = new List[n]; // 数组初始化
            // 暂略
        }
        private class Node {
            public int val;
            public int weight;
            public Node(int val, int weight) {
                this.val = val;
                this.weight = weight;
            }
        }
    }

    邻接矩阵法

    以后再写

    入度

            入度的意思,也就是进入该点的边的数量。入度的用途其实蛮大的,比如找出拓扑排序中的起点,或者判断一些特殊的点。解题的时候,不妨从入度或者出度比较特殊的点开始。代码如下:

    class Solution {
        public void calculateIndegree(int n, int[][] edges) {
            int[] indegrees = new int[n];
            for (int i = 0 ; i < edges.length;i++) {
                int[] edge = edges[i];
                int from = edge[0];
                int to = edge[1];
                indegrees[to] += 1;
            }
        }
    }

    见leetcode题目: 课程表

    展开全文
  • 图论系列:表示

    千次阅读 2014-12-14 16:54:37
    一、表示 对于一个(graph)G=(V,E)由顶点集V(vertex)和边集E(edges)组成。每一条边就是一个点对(u,w),其中u、w属于V。 1.邻接矩阵(adjacency matrix)  邻接矩阵本质上就是一个二维数组,...

    一、图的表示

    对于一个图(graphG=VE)由顶点集Vvertex)和边集Eedges)组成。每一条边就是一个点对uw),其中uw属于V

    1.邻接矩阵(adjacency matrix

        邻接矩阵本质上就是一个二维数组,例如对于每条边(uw),可以表示为A[u][w]=1(边没有权值),否则A[u][w]=0(这条边不存在)。如果边有权值,可以令A[u][w]=权值。

    2.邻接表

    邻接表使用一个表来存放所有邻接的顶点。


    邻接表:由上图可知,邻接表节点由头结点和表节点组成

     

    1)头表结点结构

        ┌────┬─────┐ 

        │data          │ firstedge     

        └────┴─────┘

         顶点vi邻接表的头结点包含两个域:

     ① 顶点域data

      存放顶点vi的信息

     ② 指针域firstedge

      vi的邻接表的头指针。

     

    2)边表结点结构

        ┌────┬───┐ 

        │adjvex  next  

        └────┴───┘

         邻接表中每个表结点均有两个域:

     ① 邻接点域adjvex

      存放与vi相邻接的顶点vj的序号j

     ② 链域next

      将邻接表的所有表结点链在一起。

      注意:

        --- 若要表示边上的信息(如权值),则在表结点中还应增加一个数据域。

         ---上述图用邻接表表示为:

        A   B   C   D

    A   0   1   1    1

    B   1   0   0    1

    C   1   0   0    0

    D   1   1   0    0

    二、C代码实现其数据结构

    1.邻接矩阵

    在C语言中,如果我们想表示标准C语言不存在的数据类型,一般使用结构体来实现。把已有的数据类型组合成我们想要的数据类型。表示一张图,需要的参数有:图的顶点数,图的边数,一个二维数组,因此可以定义一个结构体包含三种类型的数据

    #define ROW 100
    #define COL 100
    typedef  struct AdjMatrix
    {
    	int matrix[ROW][COL];
    	int NumVertex;      //图的顶点数
    	int Numedges;       //图的边数
    }MGraph;
    //使用指针进行构建,自己管理内存
    typedef  struct AdjMatrix_P
    {
    	int *matrix;
    	int NumVertex;  //图的顶点个数
    	int Numedges;   //图的边数
    }MPGraph;

    这里使用了两种方法去构建图的数据类型,第一种方法定义了一个固定长度的二维数组,第二种方法定义一个指向整形类型的指针,但在使用前需要为其分配内存,来存放图的节点和边的信息。

    使用第一个数据类型构建一张图:


    void CreateGraph_AM(MGraph *G)
    {
    	int i=0,j=0;
    	int s,t,w;
    	cout<<"请输入顶点数和边数:";
    	cin>>G->NumVertex>>G->Numedges;
    	for(i=0;i<G->NumVertex;i++)
    		for(j=0;j<G->NumVertex;j++)
    		{
    			G->matrix[i][j]=0;
    		}
    
    	for(i=0;i<G->Numedges;i++)
    	{
    		cout<<"请输入第"<<i+1<<"边的起点,终点和权值:";
    		cin>>s>>t>>w;
    		G->matrix[s][t]=w;
    	}
    }
    void print_AM(MGraph *G)
    {
    	int i=0,j=0;
    	for(i=0;i<G->NumVertex;i++)
    	{
    		for(j=0;j<G->NumVertex;j++)
    		{
    			cout<<left;    //左对齐,占五个字符
    			cout<<setw(5)<<G->matrix[i][j]<<setw(5);
    		}
    		cout<<endl;
    	}
    }

    图的运行效果:


    使用第二种数据类型构建一张图:

    void CreateGraph_AMP(MPGraph *G)
    {
    	int i=0,j=0;
    	int s,t,w;
    	cout<<"请输入顶点数和边数:";
    	cin>>G->NumVertex>>G->Numedges;
    	G->matrix=(int *)malloc(G->NumVertex*G->NumVertex*sizeof(int));
    	if(G->matrix==NULL)
    	{
    		cout<<"内存分配失败";
    		return;
    	}
    	for(i=0;i<G->NumVertex;i++)  //初始化
    		for(j=0;j<G->NumVertex;j++)
    		{
    			*(G->matrix+i*G->NumVertex+j)=0;
    		}
    
    	for(i=0;i<G->Numedges;i++)
    	{
    		cout<<"请输入第"<<i+1<<"边的起点,终点和权值:";
    		cin>>s>>t>>w;
    		*(G->matrix+s*G->NumVertex+t)=w;
    	}
    }
    void print_AMP(MPGraph *G)
    {
    	int i=0,j=0;
    	for(i=0;i<G->NumVertex;i++)
    	{
    		for(j=0;j<G->NumVertex;j++)
    		{
    			cout<<left;    //左对齐,占五个字符
    			cout<<setw(5)<<*(G->matrix+i*G->NumVertex+j)<<setw(5);
    		}
    		cout<<endl;
    	}
    }

    2.邻接表

    邻接表由表头顶点和边表节点组成,因此要先定义头顶点和边表节点的数据结构。

    typedef char VertexType;
    //边表节点
    typedef struct _EdgeNode
    {
    	int adjvex;              //边表顶点号,用于存放于头表顶点邻接的顶点Vj的序号j
    	int weight;              //权值
    	struct _EdgeNode * next; //指向下一个边表节点
    
    }EdgeNode;
    typedef struct _VNode  //头顶点信息
    {
    	VertexType data;      //存放顶点的信息。。。
    	EdgeNode *firstEdge;
    }VNode;

    定义好头节点和边节点之后,就可以定义邻接表数据结构了,同邻接矩阵一样,也有2种方法:

    #define MAXVERTEXNUM 100
    typedef  struct AdjList
    {
    	VNode adjList[MAXVERTEXNUM];
    	int NumVertex;
    	int Numedges;
    }LGraph;
    //用指针来实现	
    typedef  struct AdjList_P
    {
    	VNode *adjList;  //需要分配内存
    	int NumVertex;
    	int Numedges;
    }LPGraph;

    使用第一种数据类型构建一张图:

    void CreateGraph_AL(LGraph *G)
    {
    	int i=0;
    	int s,t,w;
    	VertexType data;
    	cout<<"请输入顶点数和边数:";
    	cin>>G->NumVertex>>G->Numedges;
    	//初始化表头
    	for(i=0;i<G->NumVertex;i++)
    	{
    		cout<<"请输入第"<<i+1<<"顶点的信息:";
    		cin>>data;
    		G->adjList[i].data=i;
    		G->adjList[i].firstEdge=NULL;
    	}
    	for(i=0;i<G->Numedges;i++)
    	{
    		cout<<"请输入第"<<i+1<<"边的起点,终点和权值:";
    		cin>>s>>t>>w;
    		EdgeNode *p=(EdgeNode*)malloc(sizeof(EdgeNode)); //定义一个边表节点指针,并为其分配内存
    		if(p==NULL)
    		{
    			cout<<"内存分配失败";
    			return;
    		}
    		//修改指针,每次在表头节点后面插入新的节点,其它节点后移
    		p->next=G->adjList[s].firstEdge;
    		G->adjList[s].firstEdge=p;
    		p->adjvex=t;
    		p->weight=w;
    	}
    }
    void print_AL(LGraph *G)
    {
    	int i=0;
    	for(i=0;i<G->NumVertex;i++)
    	{
    		if(G->adjList[i].firstEdge==NULL)
    		{
    			cout<<"第"<<i+1<<"顶点:"<<G->adjList[i].data<<" 邻接表:->NULL";
    			cout<<endl;
    		}
    		else
    		{
    			cout<<"第"<<i+1<<"顶点:"<<G->adjList[i].data<<" 邻接表:";
    			EdgeNode *q=G->adjList[i].firstEdge;
    			while(q!=NULL)
    			{
    				cout<<"->"<<G->adjList[q->adjvex].data;
    				q=q->next;
    			}
    			cout<<endl;
    		}
    	}
    }


    使用第二种数据类型构建一张图:需要为头顶点指针分配内存

    void CreateGraph_ALP(LPGraph *G)
    {
    	int i=0;
    	int s,t,w;
    	VertexType data;
    	cout<<"请输入顶点数和边数:";
    	cin>>G->NumVertex>>G->Numedges;
    	G->adjList=(VNode *)malloc(G->NumVertex*sizeof(VNode));
    	if(G->adjList==NULL)
    	{
    		printf("内存分配失败");
    		return;
    	}
    	//1.初始化
    	for(i=0;i<G->NumVertex;i++)
    	{
    		cout<<"请输入第"<<i+1<<"顶点的信息:";
    		cin>>data;
    		G->adjList[i].data=data;
    		G->adjList[i].firstEdge=NULL;
    	}
    	//2.记录边与权值
    	for(i=0;i<G->Numedges;i++)
    	{
    		cout<<"请输入第"<<i+1<<"边的起点,终点和权值:";
    		cin>>s>>t>>w;
    		EdgeNode *p=(EdgeNode*)malloc(sizeof(EdgeNode)); //定义一个边表节点指针,并为其分配内存
    		if(p==NULL)
    		{
    			cout<<"内存分配失败";
    			return;
    		}
    		//修改指针,每次在表头节点后面插入新的节点,其它节点后移
    		p->next=G->adjList[s].firstEdge;
    		G->adjList[s].firstEdge=p;
    		p->adjvex=t;
    		p->weight=w;
    	}
    }
    void print_ALP(LPGraph *G)
    {
    	int i=0;
    	for(i=0;i<G->NumVertex;i++)
    	{
    		if(G->adjList[i].firstEdge==NULL)
    		{
    			cout<<"第"<<i+1<<"顶点:"<<G->adjList[i].data<<" 邻接表:->NULL";
    			cout<<endl;
    		}
    		else
    		{
    			cout<<"第"<<i+1<<"顶点:"<<G->adjList[i].data<<" 邻接表:";
    			EdgeNode *q=G->adjList[i].firstEdge;
    			while(q!=NULL)
    			{
    				cout<<"->"<<G->adjList[q->adjvex].data;
    				q=q->next;
    			}
    			cout<<endl;
    		}
    	}
    }


    运行效果:



    三、图的两种表示方法比较

    (1)找顶点的所有邻接顶点

    邻接矩阵:可以判断对应顶点序号的一维数组的值,例如:A[1][...]=? 若=0,邻接;=1邻接

    邻接表:扫描对应的邻接表

    (2)内存

    邻接矩阵占用的内存:O(V平方)

    邻接表:O(V+E)

    若图是稠密的,选择邻接矩阵是合适的;若图是稀疏的,选择邻接表是合适的;


    展开全文
  • 专题地图符号设计与构图

    千次阅读 2019-03-20 23:37:45
    专题地图符号设计是地图编制与可视化的重点内容之一。 一、符号设计应遵循的原则 符号设计应遵循多种原则,包括图案化、精确性、逻辑性、系统性、对比性和协调性、色彩的象征性、视力与制印条件、印刷与经济效果和...

    专题地图符号设计是地图编制与可视化的重点内容之一。

    一、符号设计应遵循的原则

    符号设计应遵循多种原则,包括图案化、精确性、逻辑性、系统性、对比性和协调性、色彩的象征性、视力与制印条件、印刷与经济效果和计算机制图的需要等。

    1. 图案化
      地图符号图形的设计要以地物的实际形态为主要依据,尽量做到图案化,使地图清晰易读,便于绘制。所谓图案化,就是要用抽象概括的方法,突出地物最本质特征,舍去不必要的细部,用较规则的图案表示出来,并用艺术手法加以美化,使图案具有形象、简洁、精确、醒目的特点,读者一看到符号便可以联想到所代表的事物。
      地图上图案化的符号一般采用地物的侧视、正视或俯视图形;对某些形体较小或不可见的要素,则多采用会意性(或记号性)符号。
    2. 精确性
      各类符号应能精确地表示地面事物的位置,凡能依比例尺表示的,按其水平投影的面状轮廓,以实线虚线或点线表示;不能依比例尺描绘的,也应保证表达该地物实际位置的主点或主线,以便进行量算,或作为数字化采点时的依据。
    3. 逻辑性
      设计地图符号,形式和内容应有内在的联系,例如,图形的大小、线划的粗细与虚实,应能反映要素占有空间位置的大小和主次。
      一般情况下,用虚线图形表示地下的、不稳定的、不准确的、无形的。而用实线图形表示地上的、稳定的、准确的和有形的要素。
      又如根据道路的重要性,铁路用黑白相间的线状符号表示,公路用双线符号表示,低级道路则用单线符号表示。这样设计符合逻料,便于读图识别。
    4. 系统性
      各种比例尺地图符号的分类、分级、构图和设色,在其性质相近的情况下,应尽可能保持必要的对应或相似,使之与已经定型的惯用符号系统保持一定的联系,形成特定系列;
      但是符号的尺寸和颜色,则需结合地图的用途、比例尺等因素确定。
      此外,还可以通过符号的搭配或组合而派生出新的符号系列。
    5. 对比与协调性
      地图符号应能明显区分要素的种类、性质及其不同等级,为此各类地图符号的图形、尺寸与颜色要有明显的对比或显著的差别。但互相联系配合的地图符号,在尺寸上应保持协调。
    6. 色彩的象征性
      大自然丰富的色彩给人们造成的视觉印象,使色彩应用逐渐具有了象征合义,地图符号的色彩设计应尽可能地与自然景色相近似,使符号具有一定的象征性,如蓝色象征水体,绿色象征植被,棕色象征地貌和土质等。若进一步发展,还可以利用色彩的性质来区分事物的质量特征,如红色和橙色象征革命,绿色象征生命与和平。
    7. 视觉分辨与制印限制
      地图符号尺寸的设计,必须考虑正常视力条件下的地图制作、地图阅读使用和印刷技术等一系列基本要求。一般地图上符号的尺寸都以中等尺寸为标准, 对于精度要求较高的地图,符号尺寸还可以再小些。例如,最小点为0.2mm,最细线为0.1mm,最小圆直径0.6mm等。
    8. 印刷与经济效果
      地图符号的用色并非越多越好,用色过多不仅成本高、印刷周期长,而且还会影响地图的精度和整体视觉美感,因此,一个单一的地图符号最好只用一种颜色,或用不同色调配合成双色,也可把紧密结合的要素通用一种颜色。
    9. 计算机制图的特殊需要
      在使用计算机制图时,除了考虑上述原则之外,还要考虑到计算机地图制图的特殊要求,使符号的设计简单而规则。例如,用折线代替曲线,用简单图形代替复杂图形,用固定尺寸的符号取代分级符号,用固定线划宽度取代渐变式线划宽度。

    二、地图符号构图

      符号设计首先应从地图的使用要求出发,对地图基本内容及其地理资料进行全面的分析研究,拟定分类分级原则;其次是确定各项内容在地图整体结构中的地位,并据以排定它们所应有的感受水平;接着选择适当的视觉变量,最后据此设计并绘出每一种符号的具体形式。

    1.点状符号的构图与设计

      点状符号代表点状地物的分布,在图上所占面积相对较小,几何符号、象形符号、透视符号、文字符号都是点状符号。几何符号的基本图形是圆形、三角形、方形、菱形、五角星形以及六边形、梯形等。基本图形虽不多,但通过多种变化和组合,可以形成丰富的几何符号系统。
    在点状符号的设计中,常考虑视觉变量、组合和反衬等。

    (1)顾及形状变量的点状符号构图与设计

      主要分轮廓变化和内部结构变化:
      轮廓: 几何图形的轮廓线有粗细、实虚变化。粗实线轮廓明显有力,整体感好,细、虚线轮廓对比性低。由于定性几何符号大多尺寸较小,故轮廓变化有限,大多只限于粗细之分。
      内部结构: 点状符号内部结构变化可引起几何符号内部结构和视觉效果的复杂变化。在数量有限的几何符号的内部再附加简单的直线、曲线或叠加其他几何图形,是几何符号构图的主要手段之一。

    (2)顾及尺寸变量的点状符号的构图与设计

      尺寸变量也是几何符号演变常用的形式,常用来表示制图对象的数量指标,尺寸与结构和对比度配合,主要可以用来反映对象的主次或等级概念。

    (3)顾及颜色变量的点状符号的构图与设计

      几何符号的颜色常用来表示事象的质量特征,由于从视觉上看,符号的颜色差异比形状差异更加明显,因此常用于表示重要的、主要的性质类别。对于点状符号来说,颜色的运用主要是利用色相的变化,一般以最简单的几何图形再配以不同色相构成了区别明显的符号外形。

    (4)顾及方向变量的点状符号的构图与设计

      几何符号的方向变化也可以造成视觉上的明显差异,但是,基本几何图形的方向变化种类是有限的。比如,圆形符号就没有方向性,而方形符号也只能有45°角的旋转变化。然而,当符号内部的结构表现出方向以后,方向变量的可选择种类也随之扩大,从而可构成更多外形不同的点状符号。

    (5)组合构图的点状符号的设计

      几个基本图形组合成新的几何图形,或者用不同的基本图形的局部拼合起来,可以得到新的符号,使几何符号系统更加丰富。组合符号不仅可呈现出一定的立体效果,而且也可体现出一定的象形化特点

    (6)反衬构图的点状符号设计

      反村是指在对点状符号进行内部修饰时所采用的“外实内空”或“外空内实”的手法,由于强调了内外图形块面之间的强烈对比,因而符号的外观更美,更具强调性。

    2. 线状符号的设计

      地图上大多数内容都是通过线条描绘的,线状符号可以表现实际的线性现象,如河流、道路、断裂线等、也可以作为不同性质的区域分界线,甚不包括各种等值线等,在制图中,线状符号可以分为定性线状符号、等级线状符号、定向找状符号和等值线状符号。

    (1)定性线状符号的构图与设计

      定性线状符号反映事物的类型或质量的差别,一般较细,构图不复杂。最常使用的视觉变量是颜色(主要是色相)和形状。在线型一定时,用不同颜色可以区分事物的性质。
    例如,用等粗的红色实线表示道路,蓝色线条表示沟渠,黑色钱条表示行政境界,在颜色一定时,通过形状变量的变化也可以达到同样目的。线状符号的形状变化主要通过使用一种或几种图形元素的重复、连续变化、虚实变化以及图形变化来实现。

    (2)等级线状符号的构图与设计

      尺寸变量再辅以色彩、形状、密度等变量,可用于表示事物的等级或强度。尺寸变化主要为线划粗细的变化,能较好反映制图对象的等级强度,如在某比例尺的交通图上,用同为红色的0.8mm线条表示高速公路,0.5mm线条表示国道, 0.3mm线条表示省道, 0.1mm线条表示县级道路。

    (3)动线符号的构图与设计

      动线符号又称定向线状符号,是指表现某些事物沿一定线路的运(流)动方向与趋势的箭形符号。例如,反映自然事象中的洋流、台风、寒潮等;反映人文事物中的货流、客流、人口迁移等。
      箭形符号的定向可以采用尺寸渐变的方式来表示。 简头是最重要的构图元素,可以直接绘在线状符号的前端,也可以作为方向标记放在线状符号的近旁。箭形符号线体的宽度能够表现事象的数量指标,可以用绝对比率、条件比率或分级表示。
      动线符号可以表示单一指标或多项指标。 在反映多项指标时,线体可设计成“培构动线”形式,即在一定宽度的线体之上根据各指标的比率划分纵向条带,并在其中填充不同的颜色或晕线花纹。

    (4)等值线状符号的构图与设计

      如前所述,等值线是将空间数值相等的点连结成平滑的曲线,用于表示空间上具有连续分后而逐渐变化特征的自然事象的数量变化,如气候、水文、地形等。在地图符号的应用中,等值线状符号能很好地刻画出趋势面的数量特征及其总体概貌。
    等值线的外形一般为单值实线,本身没有形状的差别,在有些通过分层设色的地图上(如地势图)甚至可以隐形。在同一幅地图上如果需要表示两种以上的事象,比如气温、降水,则一般通过颜色变量加以区分。

    3. 面状符号的构图与设计

      面状符号本身只反映区域性质特征。面状符号不仅可表示面状现象,也可表现离散分布的点状或线状对象的区域统计数据,常利用网纹和色彩来表示质量和数量特征。

    (1)使用网纹的面状符号构图与设计

      网纹指在个体符号或面状符号内部由线条或图形符号重复或交替使用而构成的群体图形,简单地说就是构成符号的晕线或花纹,不同网纹可以表示专题事象的质量特征。在构图上主要有晕线、花纹、晕线花纹混合构图的3种形式的面状符号。
      晕线: 即平行直线,也可以是平行曲线或折线。其构成要素是线划的粗细、曲直、方向、颜色、疏密和交叉、交错等结构方式,一般利用线条的方向、颜色,交叉与结合形式来反映面状事象的性质差别,也可以利用线宽、间距和密度来反映事象的数量大小或级别高低。

      花纹: 是由不同形状和颜色的简单图元通过一定的排列与组合所构成的有规律的复杂图形。在构图时,可使用简单图元的形状、方向、结构、颜色等4个变量,不同外型的花纹可反映事象的性质差别,而依靠花纹内部图元的大小和密度则可反映事象的数量与等级特征。
      晕线花纹混合构图: 是把晕线和花纹结合起来,这样可以产生更多的图纹形式,由线和点交错排列、组合或多种单元图形混合排列组合等。

    (2)使用色彩变量的面状符号构图与设计

      在不同范围内普染各种色彩,称为普染色或底色,它比晕线、花纹更鲜明,视觉冲击力更强,较为常用。不同的色相可表达定性数据,不同纯度和亮度的变化可表达等级和量化数据。


    Reference:

    全文参考自《数字专题地图》

    展开全文
  • C语言符号意思(看了必懂系列)

    万次阅读 多人点赞 2019-11-30 12:23:58
    C语言符号 运算符的种类C语言的运算符可分为以下几类: 1.算术运算符 用于各类数值运算。包括加(+)、减(-)、乘( )、除(/)、求余(或称模运算,%)、自增(++)、自减(–)共七种。 2.关系运算符 用于比较运算。包括...

    所有的努力都不会完全白费,你付出多少时间和精力,都是在对未来的积累。世界上什么都不公平,唯独时间最公平,你是懒惰还是努力,时间都会给出结果。
    auto :声明自动变量 一般不使用
    double :声明双精度变量或函数
    int: 声明整型变量或函数
    struct:声明结构体变量或函数
    break:跳出当前循环
    else :条件语句否定分支(与 if 连用)
    long :声明长整型变量或函数
    switch :用于开关语句
    case:开关语句分支
    enum :声明枚举类型
    register:声明积存器变量
    typedef:用以给数据类型取别名(当然还有其他作用)
    char :声明字符型变量或函数
    extern:声明变量是在其他文件正声明(也可以看做是引用变量)
    return :子程序返回语句(可以带参数,也看不带参数)
    union:声明联合数据类型
    const :声明只读变量
    float:声明浮点型变量或函数
    short :声明短整型变量或函数
    unsigned:声明无符号类型变量或函数
    continue:结束当前循环,开始下一轮循环
    for:一种循环语句(可意会不可言传)
    signed:生命有符号类型变量或函数
    void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)
    default:开关语句中的“其他”分支
    goto:无条件跳转语句
    sizeof:计算数据类型长度
    volatile:说明变量在程序执行中可被隐含地改变
    do :循环语句的循环体
    while :循环语句的循环条件
    static :声明静态变量
    if:条件语句

    C语言中的符号 运算符的种类C语言的运算符可分为以下几类:
    1.算术运算符 用于各类数值运算。包括加(+)、减(-)、乘()、除(/)、求余(或称模运算,%)、自增(++)、自减(–)共七种。
    2.关系运算符 用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。
    3.逻辑运算符 用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
    4.位操作运算符 参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。
    5.赋值运算符 用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,
    =,/=,%=) 和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
    6.条件运算符 这是一个三目运算符,用于条件求值(?: )。
    7.逗号运算符 用于把若干表达式组合成一个表达式(,)。
    8.指针运算符 用于取内容(*)和取地址(&)二种运算。
    9.求字节数运算符 用于计算数据类型所占的字节数(sizeof)。
    10.特殊运算符 有括号(),下标[],成员(→,.)等几种。

    1.C的数据类型 基本类型,构造类型,指针类型,空类型
    2.基本类型的分类及特点
    类型说明符 字节 数值范围
    字符型char 1 C字符集
    基本整型int 2 -32768~32767
    短整型short int 2 -32768~32767
    长整型 long int 4 -214783648~214783647
    无符号型 unsigned 2 0~65535
    无符号长整型 unsigned long 4 0~4294967295
    单精度实型 float 4 3/4E-38~3/4E+38
    双精度实型 double 8 1/7E-308~1/7E+308
    3.常量后缀 L或l 长整型 U或u 无符号数 F或f 浮点数
    4.常量类型 整数,长整数,无符号数,浮点数,字符,字符串,符号常数,转义字符。
    5.数据类型转换 ·自动转换 在不同类型数据的混合运算中,由系统自动实现转换, 由少字节类型向多字节类型转换。 不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型。 ·强制转换 由强制转换运算符完成转换。
    6.运算符优先级和结合性 一般而言,单目运算符优先级较高,赋值运算符优先级低。 算术运算符优先级较高,关系和逻辑运算符优先级较低。 多数运算符具有左结合性,单目运算符、三目运算符、 赋值
    7.表达式 表达式是由运算符连接常量、变量、函数所组成的式子。 每个表达式都有一个值和类型。 表达式求值按运算符的优先级和结合性所规定的顺序进行。
    表示输出类型的格式字符 格式字符意义
    d 以十进制形式输出带符号整数(正数不输出符号)
    o 以八进制形式输出无符号整数(不输出前缀O)
    x 以十六进制形式输出无符号整数(不输出前缀OX)
    u 以十进制形式输出无符号整数
    f 以小数形式输出单、双精度实数
    e 以指数形式输出单、双精度实数
    g 以%f%e中较短的输出宽度输出单、双精度实数
    c 输出单个字符
    s 输出字符串
    标志字符为-、+、#、空格四种,其意义下表所示:
    标志格式字符 标 志 意 义
    - 结果左对齐,右边填空格
    + 输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号
    对c,s,d,u类无影响;对o类, 在输出时加前
    缀o 对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点
    格式字符串
    格式字符串的一般形式为: %[*][输入数据宽度][长度]类型 其中有方括号[]的项为任选项。各项的意义如下:
    1.类型
    表示输入数据的类型,其格式符和意义下表所示。
    格式 字符意义
    d 输入十进制整数
    o 输入八进制整数
    x 输入十六进制整数
    u 输入无符号十进制整数
    f或e 输入实型数(用小数形式或指数形式)
    c 输入单个字符
    s 输入字符串
    转义字符
    转义字符是一种特殊的字符常量。转义字符以反斜线”\”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。
    常用的转义字符及其含义
    转义字符 转义字符的意义
    \n 回车换行
    \t 横向跳到下一制表位置
    \v 竖向跳格
    \b 退格
    \r 回车
    \f 走纸换页
    \ 反斜线符”\”
    \’ 单引号符
    \a 鸣铃
    \ddd 1~3位八进制数所代表的字符
    \xhh 1~2位十六进制数所代表的字符 广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。
    在C语言中,对变量的存储类型说明有以下四种:
    auto 自动变量
    register 寄存器变量
    extern 外部变量
    static 静态变量
    自动变量和寄存器变量属于动态存储方式, 外部变量和静态变量属于静态存储方式。在介绍了变量的存储类型之后, 可以知道对一个变量的说明不仅应说明其数据类型,还应说明其存储类型。 因此变量说明的完整形式应为: 存储类型说明符 数据类型说明符 变量名,变量名…; 例如:
    static int a,b; 说明a,b为静态类型变量
    auto char c1,c2; 说明c1,c2为自动字符变量
    static int a[5]={1,2,3,4,5}; 说明a为静整型数组
    extern int x,y; 说明x,y为外部整型变量 与指针有关的各种说明和意义见下表。
    int *p; p为指向整型量的指针变量
    int *p[n]; p为指针数组,由n个指向整型量的指针元素组成。
    int (*p)[n]; p为指向整型二维数组的指针变量,二维数组的列数为n int *p() p为返回指针值的函数,该指针指向整型量
    int (*p)() p为指向函数的指针,该函数返回整型量
    int **p p为一个指向另一指针的指针变量,该指针指向一个整型量。
    在这里插入图片描述

    展开全文
  • MapObjects地图填充符号库扩展

    千次阅读 2011-03-18 17:04:00
    在地图制图学,将所有的地图符号划分为三大类:点状符号、线状符号和面状符号。  各种GIS平台都有自己的符号库用于地物的表示。ESRI的ArcMap就提供了非常丰富的地图符号库,在安装目录下的Bin/Styles目录你...
  • C语言系列(二)有符号数和无符号数详解

    万次阅读 多人点赞 2016-08-07 15:39:36
    在计算机,可以区分正负的类型,称为有符类型(signed),无正负的类型(只有正值),称为无符类型。 (unsigned)数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只有符类型。 字符类型也...
  • "三个符号,它们分别代表什么意思呢,都是在什么情况下使用,不同的语句是否意思相同呢,今天小编就来简单分享一下它们在不同语句的不同含义。 1、*和&在声明语句的含义 * 在“声明语句”中表示:声明一...
  • 电子设备有各种各样的。能够说明它们工作原理的是电原理,简称电路。电路有两种,一种是说明模拟电子电路工作原理的。它用各种图形符号表示电阻器、电容器、开关、晶体管等实物,用线条把元器件和单元电路...
  • 世界坐标和相机坐标,图像坐标的关系

    万次阅读 多人点赞 2016-01-25 15:35:34
    二、图像坐标:我想和世界坐标谈谈(B)  玉米将在这篇博文,对图像...图中显示,世界坐标通过刚体变换到达摄像机坐标,然后摄像机坐标通过透视投影变换到达图像坐标。可以看出,世界坐标与图像坐标的关系
  • 参考资料: http://www.coofish.org/post/FB-cizhu.html http://www.coofish.org/post/402.html  今天实验室一哥们研究DSP电路,发现图中有一个符号是FB,外形有点像电阻(R),但是不清楚是什么电子元器件,...
  • 函数、符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} \acute{\eta} \check{\alpha} \grave{\eta} \breve{a} \ddot{y} \dot{x} \hat{\alpha} \t...
  • 数学希腊符号读法含义

    千次阅读 2017-04-06 21:41:36
    磁导系数,微,动摩擦(因)数,流体动力粘度 Ν ν nu /nju:/ 磁阻系数,流体运动粘度,光子频率 Ξ ξ xi /ksi/...
  • ES6之符号符号属性

    万次阅读 2019-12-16 23:50:02
    在 JS 已有的基本类型(字符串、数值、布尔类型、 null 与 undefined )之外, ES6 引入了一种新的基本类型:符号(Symbol)。符号起初被设计用于创建对象私有成员,而这也是 JS 开发者期待已久的特性。在符号诞生...
  • HTML标记【特殊符号表示方法】!

    千次阅读 2007-10-31 00:27:00
    特殊符号表示方法>表示方式是>&表示方式是&"表示方式是"例:特殊符号的使用"中山大学"<人力资源管理>学分班&在职进修二技班招生简章==========================================...
  • Latex相关符号

    千次阅读 2017-03-23 22:30:11
    函数、符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} latex数学符号表(2)" style="border:none; max-width:100%"> \acute{\eta} latex数学符号表(2)" style="border:none; max...
  • LaTeX 各种命令,符号

    万次阅读 多人点赞 2016-06-12 15:27:42
    函数、符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} latex数学符号表(2)" style="border:none; max-width:100%"> \acute{\eta} latex数学符号表(2)" style="border:none; max...
  • 【Scala系列一】Scala各种符号的含义

    千次阅读 2017-12-14 11:28:23
    :::(三个冒号)表示List的连接操作,比如:   Java代码  val a = List(1, 2)  val b = List(3, 4)  val c = a ::: b     其中a,b保持不变,a和b连接产生一个新表List(1,2...
  • UML各图形或图标表示的意思

    千次阅读 2018-06-29 14:12:53
    类类的 UML 表示是一个长方形,垂直地分为三个区,如 1 所示。顶部区域显示类的名字。中间的区域列出类的属性。底部的区域列出类的操作。当在一个类图上画一个类元素时,你必须要有顶端的区域,下面的二个区域是可...
  • 3-UML符号与关系3.1UML的关系(非常重要)3.1.1 依赖...用UML符号表示X和Y之间的依赖关系如下。 依赖关系也是类与类之间的联结 依赖总是单向的。(注意,要避免双向依赖。一般来说,不应该存在双向依赖) 依赖关系在 Jav
  • 中文标点符号用法

    千次阅读 2008-01-11 14:42:00
    标点符号用法(国家技术监督局1995年12月13日发布) 1951年9月,原中央人民政府出版总署公布了《标点符号用法》,同年10月原政务院下达指示,要求全国遵照使用。四十年来,文字书写和书刊排印已由直行改为横行,标点...
  • 世界坐标、相机坐标、图像平面坐标

    万次阅读 多人点赞 2018-07-12 18:04:09
    一、四个坐标简介和转换 相机模型为以后一切标定算法的关键,只有这边有相当透彻的理解,对以后的标定算法才能有更好的理解。...我觉得首先我们要理解相机模型的四个平面坐标的关系:像素平面坐标(u,v...
  • ArcGIS Pro管线三维符号化方法

    千次阅读 热门讨论 2019-04-19 18:05:44
    将二维管线进行三维符号化显示步骤
  • matlab输入特殊符号

    千次阅读 2019-12-18 09:56:18
    一、文档的Text Properties: 下标用 _(下划线) 上标用^ (尖号) 斜体 \it 黑体 \bf << \ll >> \gg 正负 \pm 左箭头 \leftarrow 右箭头 \rightarrow 上箭头 \uparrow 上圆圈(度数) \circ...
  • 微积分数学符号的由来

    千次阅读 2017-04-14 10:09:27
    “使用符号,是数学史上的一件大事。一套合适的符号,绝不仅仅是起速记、节省时间的作用。它能够精确、深刻地表达... 积分的本质是无穷小的和,拉丁文中“Summa”表示“和”的意思。将“Summa”的头一个字母“S”拉
  • 点击上方“大鱼机器人”,选择“置顶/星标公众号”福利干货,第一时间送达!一、电阻系列电阻器(Resistor)是一个限流元件,用字母R来表示,单位为欧姆Ω。将电阻接在电路...
  • 其中一种建模的过程就是使用数据结构去表示问题,而处理就是相应的算法。  比如你要算卦,那么大师需要知道你的生辰年月。 那么它可能需要一个数据结构(一个点)去保存这个生辰年月,并且能够在它复杂的算法随时...
  • 数学符号大全

    万次阅读 2018-11-22 16:25:44
    常用数学输入符号: ≈ ≡ ≠ = ≤≥ ≮ ≯ ∷ ± + - × ÷ / ∫ ∮ ∝ ∞ ∧ ∨ ∑ ∏ ∪ ∩ ∈ ∵ ∴ ⊥ ‖ ∠ ⌒ ≌ ∽ √ () 【】{} Ⅰ Ⅱ ⊕ ⊙∥α β γ δ ε ζ η θ Δ 大写 ...
  • UML系列——用例图中的各种关系(include、extend)

    万次阅读 多人点赞 2018-07-25 12:16:30
    用例图中的各种关系 一、参与者与用例间的关联关系 参与者与用例之间的通信,也成为关联或通信关系。 二、用例与用例之间的关系 包含关系(include) 扩展关系(extend) 包含关系 (1) 概念 包含关系描述...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 110,741
精华内容 44,296
关键字:

家系图中的符号表示