精华内容
下载资源
问答
  • 题目如下: 一个n行m列矩阵被划分成t个矩形区域,分别用数字1-t来标识,同一个区域内元素都用同一个数字标识。如下图所示,一个6行8列矩阵被分成8个矩形区域,分别用编号1-8标识。...20),t表示矩阵被

    题目如下:

    一个n行m列的矩阵被划分成t个矩形区域,分别用数字1-t来标识,同一个区域内的元素都用同一个数字标识。如下图所示,一个6行8列的矩阵被分成8个矩形区域,分别用编号1-8标识。当两个小区域之间公用一条边时,称这两个区域相邻,例如下图中区域5的相邻区域有6个,分别为1,2,3,6,7,8,但4并不是它的相邻区域。请写一个程序找出区域k的所有相邻区域。
    在这里插入图片描述
    输入说明

    输入第一行为四个整数n,m, t,k,整数之间用空格分隔。n表示矩阵行数(n<20),m表示矩阵列数(m<20),t表示矩阵被划分为t个矩形区域(0<t<50),k为其中某个区域的编号(1<=k<=t)。接下来是n行数据,每行m个整数,表示矩阵内各个元素所在的区域,整数之间用空格分隔。

    输出说明

    输出为一个整数,表示与k相邻的区域个数

    输入样例

    6 8 8 5
    1 1 2 2 2 3 3 4
    1 1 2 2 2 3 3 4
    1 1 2 2 2 3 3 4
    1 1 5 5 5 5 5 6
    1 1 5 5 5 5 5 6
    7 7 7 7 7 8 8 8

    输出样例

    6

    .
    .
    .
    此问题看似复杂,其实分解成几个小问题去逐一解决,代码很容易就可以写出。我们用二维数组处理数据,遇到如下几个问题:
    【我们首先将整个数字网络置于一个类平面直角坐标系中,双重循环变量i和j分别控制列(y轴)和行(x轴)的变化,具体的图解如下】:
    在这里插入图片描述

    ①如何定位数字为k的矩形?
    →我们知道,矩形有四条边。而一个矩形的大小和位置可以仅由“左上角”和“右下角”两个点的位置来确定(就像我们在电脑中拉出矩形框一样)。所以,我们需要获得数字为k的矩形的位置,只需要获得这两个点的坐标(xmin,ymin)和(xmax,ymax)。见上图。

    ②如何统计相邻的区块数?
    →如此的单纯的数字统计,我倾向于之前介绍过的“计数器judge”方法。【详见博客https://blog.csdn.net/GalaxyerKw/article/details/110310346
    对该矩形周围一圈(正上,正下,正左,正右)的数字进行遍历判断。

    ③如何保证遍历判断时,数组不越界?
    →在对应的for循环内增加if条件限制即可。
    .
    .
    .
    解决了上述问题,我们就可以写代码了:

    #include<stdio.h>
    
    int main(void)
    {
      int n,m,t,k;  //n表示矩阵行数(n<20),m表示矩阵列数(m<20),t表示矩阵被划分为t个矩形区域(0<t<50),k为其中某个区域的编号(1<=k<=t)。
      scanf("%d%d%d%d",&n,&m,&t,&k);
      int p[n][m];
      int i,j;
     for (i=0; i<=n-1; i++)
     {
       for (j=0; j<=m-1; j++)
       {
         scanf("%d",&p[i][j]);
       }
     }
       //思路是先找出数字为k的矩形所在位置,再在其周围一圈遍历,看有几个不同的数
      int xmin,ymin,xmax,ymax;
      int flag=1;
     for (i=0; i<=n-1; i++)    //最左上坐标(xmin,ymin)
     {
       for (j=0; j<=m-1; j++)
       {
         if (p[i][j]==k)
         {
           xmin=j;
           ymin=i;
           flag=0;
         }
         if (flag==0)  break;
       }
        if (flag==0)  break;
     }
    
     for (i=n-1; i>=0; i--)   //最右下坐标(xmax,ymax)
     {
       for (j=m-1; j>=0; j--)
       {
         if (p[i][j]==k)
         {
           xmax=j;
           ymax=i;
           flag=1;
         }
         if (flag==1)  break;
       }
        if (flag==1)  break;
     }
    
       //调试位置坐标是否正确,可用下方注释中的程序:
       //printf("\n%d %d %d %d\n",xmin,ymin,xmax,ymax);
    
      int judge[t+1];  //开辟计数器0-t并归零
     for (i=0; i<=t; i++) {judge[i]=0;}
    
      for (j=xmin; j<=xmax; j++)  //同时检验上边和下边一行
      {
          if (j>=0 && j<=m-1 && ymin-1>=0)   //上方不能越界
          {
              judge[p[ymin-1][j]]++;
          }
          if (j>=0 && j<=m-1 && ymax+1<=n-1)  //下方不能越界
          {
              judge[p[ymax+1][j]]++;
          }
      }
      for (i=ymin; i<=ymax; i++) //再同时检验左边和右边一行
      {
          if (i>=0 && i<=n-1 && xmin-1>=0)  //左方不能越界
          {
              judge[p[i][xmin-1]]++;
          }
          if (i>=0 && i<=n-1 && xmax+1<=m-1) //右方不能越界
          {
              judge[p[i][xmax+1]]++;
          }
      }
        //此时计数器已经储存完毕所有出现过的数字,现在开始遍历计数器
      int sum=0;
      for (i=0; i<=t; i++)
      {
          if (judge[i]!=0)  sum++;
      }
      printf("%d",sum);
    
     return 0;
    }
    
    

    此题并不难,但是其思想值得我们学习。
    其思想的精华在于,将一个二维数字数组置于一个类平面直角坐标系中,通过坐标进行判断与计算,同时使用了便于统计的“计数器judge”方法。

    当然,这道题目一定还有更加简单的实现方法,望大家学习与交流,本篇文章不足之处请多多包涵与指正。

    展开全文
  • 用户希望在实现电子地图展示功能前,先看到他们输入坐标的缩略图。 实现思路:参考根据经纬度绘制坐标点相对位置 数据格式: 高斯克吕格平面直角坐标系 思路: 1.求出所有坐标点的最大横坐标差、最大纵坐标差。比较...

    需求是这样的:

    初期,
    用户输入大地坐标在电子地图上,实现对某类数据的分析

    二次需求:

    用户希望在实现电子地图展示功能前,先看到他们输入坐标的缩略图。

    实现思路:参考根据经纬度绘制坐标点相对位置

    数据格式:
    高斯克吕格平面直角坐标系
    思路:
    1.求出所有坐标点的最大横坐标差、最大纵坐标差。比较,将大的那一个的长度作为maxsize。

    2.根据最大横坐标差、最大纵坐标差之间的比例,可以算出我们短的那一边的长度。

    3.求出一个Rate。这个Rate值表示单位度数在生成图片上所占的尺寸,生成一个类似比例尺的东西。

    4.然后我们现在已经确定了我们的图片的长和宽。同时我们以最小横坐标,最小纵坐标为图片的x,y轴
    原点。然后再根据Rate,以及当前点的坐标与最小横坐标,最小纵坐标的差,求出当前点在图片上绘制时候的坐标。

    5.求出了绘图坐标之后,就可以进行绘图操作了。

    代码:

    <!DOCTYPE html>
    <html>
    <head> 
    <meta charset="utf-8"> 
    <title></title> 
    </head>
    <body>
    <div class="pic-group"> 
    			<canvas id="myCanvas" width="350" height="350"></canvas>
    		</div>
    <script>
    function draw() {
    	// 这是原始数据格式
        var arrX = [39371393.41, 39371403.73, 39371631.54, 39371618.84];
        var arrY = [3561483.96, 3561269.65, 3561269.65, 3561494.28];
    
        
        var xy = "";
        var points = [];
        for (var i = 0; i < arrX.length; i++) {
            var point = {};
            point.L = arrX[i]
            point.B = arrY[i]
            points.push(point);
            // 拼接成数组
        }
    
    
        //坐标区域长或宽,最大为250px。判断标准:坐标经度差与纬度差,大的那个为250px。再根据经度差与纬度差的比例计算出短的一边有多少px。
    
    
        // canvas画布设置
        var MAXSIZE = 300;
        var maxL = points[0]['L'];
        var maxB = points[0]['B'];
        var minL = points[0]['L'];
        var minB = points[0]['B'];
        
        var value;
    
        for (var i = 0, pointsLen = points.length; i < pointsLen; i++) {
            value = points[i];
            maxL = maxL < value['L'] ? value['L'] : maxL;
            maxB = maxB < value['B'] ? value['B'] : maxB;
            minL = minL > value['L'] ? value['L'] : minL;
            minB = minB > value['B'] ? value['B'] : minB;
        }
    
        var diffL = maxL - minL;//经度差
        var diffB = maxB - minB;//纬度差
    
        var width, height, Rate, diff;
        //计算坐标区域height width;
    
        if (diffL == 0) {
            width = MAXSIZE;
            height = MAXSIZE;
            Rate = MAXSIZE / parseFloat(diffB);
        } else if (diffB == 0) {
            width = MAXSIZE;
            height = MAXSIZE;
            Rate = MAXSIZE / parseFloat(diffL);
        } else if (diffL >= diffB) {
            diff = diffL;
            width = MAXSIZE;
            Rate = MAXSIZE / parseFloat(diffL);//单位坐标的有多少个px值。
            height = diffB / diffL * MAXSIZE;
        } else {
            diff = diffB;
            height = MAXSIZE;
            Rate = MAXSIZE / parseFloat(diffB);//单位坐标的有多少个px值。
            width = diffL / diffB * MAXSIZE;
    
        }
    
        var ctx = document.getElementById("myCanvas").getContext("2d");
        ctx.clearRect(0, 0, 350, 350);//清空画布
        ctx.save();
        ctx.translate(20, 20);//多出来的40是用来防止名字,以及点上的圆点显示不下
    
    
        // 根据B,L计算像素位置。计算应该有px。多出来的6,和10,表示所有坐标都向右移动6px,向下移动10px,也是避免基站名和圆点显示不下。
        for (var k = 0, pointsLen = points.length; k < pointsLen; k++) {
            value = points[k];
            if (diffL == 0) {
                points[k]['Lpx'] = MAXSIZE / 2;
                points[k]['Bpx'] = parseInt(height - (value['B'] - minB) * Rate);
            } else if (diffB == 0) {
                points[k]['Lpx'] = parseInt((value['L'] - minL) * Rate);
                points[k]['Bpx'] = MAXSIZE / 2;
            } else {
                points[k]['Lpx'] = parseInt((value['L'] - minL) * Rate);
                points[k]['Bpx'] = parseInt(height - (value['B'] - minB) * Rate);
            }
        }
        ctx.beginPath();
        ctx.moveTo(points[0]['Lpx'], points[0]['Bpx']);
    
        for (var x = 0, pointsLen = points.length; x < pointsLen; x++) {
            value = points[x];
            i = x + 1;
            while (i < pointsLen) {
                ctx.lineTo(points[i]['Lpx'], points[i]['Bpx']);
                i++;
            }
            ctx.stroke();
            ctx.fillStyle = 'rgb(29,143,254)';
        }
        ctx.fill();
    
       ctx.beginPath();
        ctx.arc(285, 285, 30, 0, Math.PI, false);
        ctx.fill();
    
        ctx.restore();
    };
    
    
    draw() 
    </script>
    
    </body>
    </html>
    

    代码实现效果:
    坐标生成的效果图

    展开全文
  • 1地理坐标的概念子午面与地球椭球面的交线,称为经线或子午线。国际上统一规定以通过英国伦敦格林威治天文台的经线为起始经线(0°),也叫本初子午线。从起始经线开始,向东、西各以180°计算,向东称东经,向西称...

    地理坐标怎么写

    书写格式及方法

    地理坐标是用纬度、经度表示地面点位置的球面坐标。地理坐标系以地

    轴为极轴,所有通过地球南北极的平面均称为子午面。地理坐标,就是用经

    纬度表示地面点位的球面坐标。

    1

    地理坐标的概念子午面与地球椭球面的交线,称为经线或子午线。国际

    上统一规定以通过英国伦敦格林威治天文台的经线为起始经线(

    ),也叫本

    初子午线。从起始经线开始,向东、西各以

    180°

    计算,向东称东经,向西称

    西经。所有通过地轴的平面,都和地球表面相交而成为(椭)圆,这就是经

    线圈,每个经线圈都包括两条相差

    180

    度的经线。所有经线都在两极交会,

    呈南北方向,长度也彼此相等。经差

    在赤道上的纬线长约

    111km

    所有垂直于地轴的平面与地球椭球面的交线,称为纬线。赤道纬度为零,

    赤道以北为北纬,以南为南纬,向北向南各分

    90°

    。纬度不同的纬线长度不

    相等。经差

    的纬线弧长为

    111cosB

    (

    km

    )

    B

    为纬度。

    经纬线相互交织构成经纬网,以经度、纬度表示地面上点的位置的球面坐

    标称为地理坐标。例如:我国首都北京位于北纬

    40

    度和东经

    116

    度的交点附

    近,昆明位于北纬

    25

    度和东经

    103

    度的交点附近。

    由地球椭球体上任一点引一垂直于该点地平线的直线,其与赤道面相交所

    构成的夹角称为地理纬度。任一点所在经线圈与起始经线圈间的夹角称为该

    点的地理经度。地球上或地图上的点位表示为

    M

    (

    L,B

    )。在地图上以内图廓

    和经纬网(或分度带)形式表示。在大于

    1

    10

    万地形图上,地理坐标网以

    图廓形式表现,图廓四角注记经纬度数值,内外图廓间绘有分度带。在小比

    展开全文
  • 编写一个表示二维平面类MyPoint,满足以下条件: 1、定义private成员变量x和y,表示x和y坐标,类型为double 2、定义两个MyPoint构造方法,一个构造方法不带参数,而且x和y初始值为0,另一个构造...

    编写一个表示二维平面上的点的类MyPoint,满足以下条件:
    1、定义private的成员变量x和y,表示点的x和y坐标,类型为double
    2、定义两个MyPoint的构造方法,一个构造方法不带参数,而且x和y的初始值为0,另一个构造方法有两个参数,参数名为x和y,类型为double,用这两个参数分别作为初始x和y坐标
    3、定义一个getD方法,有一个类型为MyPoint的对象参数,功能为返回当前对象和参数对象这两个坐标点的距离,返回值为double类型
    4、编写测试的main方法,调用getD计算两个点之间的距离

    输入:
    输入2行数据, 总共4个有理数。每2个数据一组,表示一个点的x和y坐标,每行的2个数据用空格隔开。例如:
    200.1 200.2
    200.3 200.4

    输出:
    输出两个点之间的距离。例如:
    0.28284271247464315
    测试代码如下:

    package jiayoubao;
    import java.util.Scanner;
    class MyPoint{
    	private double x,y;
    	MyPoint(){
    		x=0;
    		y=0;
    	}
    	MyPoint(double x,double y){
    		this.x=x;
    		this.y=y;
    	}
    	double getD(MyPoint b){
    		double xd=this.x-b.x;
    		double yd=this.y-b.y;
    		return Math.sqrt(xd*xd+yd*yd);
    		
    	}
    }
    
    public class TestdistancetwoPoints {
    
    	public static void main(String[] args) {
    		Scanner input=new Scanner(System.in);
    		System.out.println("输入:");
    		MyPoint a=new MyPoint(input.nextDouble(),input.nextDouble());
    		MyPoint b=new MyPoint(input.nextDouble(),input.nextDouble());
    		System.out.println("输出:\n"+a.getD(b));
    	}
    
    }
    

    在这里插入图片描述

    展开全文
  • 我国地形图采用高斯-克吕格平面直角坐标系。在该坐标系中,横轴:赤道,用Y表示;纵轴:中央经线,用X表示坐标原点:中央经线与赤道交点,用O表示。赤道以南为负,以北为正;中央经线以东为正,以西为负...
  • 编写一个表示二维平面类MyPoint,满足以下条件:1、定义private成员变量x和y,表示x和y坐标,类型为double2、定义两个MyPoint构造方法,一个构造方法不带参数,而且x和y初始值为0,另一个构造方法...
  • Go中的API服务器处理一系列在简单二维平面表示为(x,y)坐标的点。 如果需要对此概念进行复习,请查看 。 它在/ api / points处具有一个api路由,该路由接受带有以下参数的GET请求,并使用Manhattan距离方法返回...
  • :本文主要介绍了地理信息系统中各种坐标基本特征和表示形式,并给出了GPS 椭球坐标向各种符合人们实际习惯的平面和三维直角坐标转换。
  • 展开全部表示方法两个向量a和b叉积写作a×b(有时也被写成a∧b,避免32313133353236313431303231363533e78988e69d8331333431363036和字母x混淆)。定义向量积可以被定义为:。模长:(在这里θ表示两向量之间夹角...
  • 概述 本文主要介绍相机针孔模型的基本原理,包括相机坐标系、成像坐标系以及像素坐标系之间的转换关系——...针孔相机模型是用于表示相机将三维坐标转化为平面坐标的最常用的模型,数学物理原理非常简单,各种相关...
  • 我们显示su 2 $$ \ mathfrak {s} \ mathfrak {u}(2)$$与su 2 $$ \ mathfrak {s} \ mathfrak {u}(2)$相关量子空间的坐标算子Lie代数 非交换性可以方便地用SO(3)-协变多微分对合表示表示。 我们表明,从...
  • 编写一个表示二维平面类mypoint,满足以下条件:1、定义private成员变量x和y,表示x和y坐标,类型为double2、定义两个mypoint构造方法,一个构造方法不带参数,而且x和y初始值为0,另一个构造方法...
  • 大家都知道,美国GPS使用是WGS84的坐标系统,以经纬度形式来表示地球平面某一个位置,这应该是国际共识。但在我国,出于国家安全考虑,国内所有导航电子地图必须使用国家测绘局制定加密坐标系统,即将一个...
  • 复数的表示方法

    2016-12-12 20:39:00
    基本表示 \[C = R + Ij\] \(R\): 实部, Real \(I\): 虚部, Imaginary. \(j^2 = -1\) 用复平面表示 二维平面, \(x\)表示实部, \(y\)...用复平面坐标表示 \[ C = |C|(cos \theta + jsin \theta) \] 其中: \(|...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 585
精华内容 234
关键字:

平面坐标的表示方法