精华内容
下载资源
问答
  • 除了根据目视判别来绘制点、线、面图形外,还需要根据特定的数字化条件进行快速、有效的数据绘制,如根据坐标绘制直线端点、定长直线、平行线垂直线等。本实验讲述了数字化线要素时绘制自定义直线、定长直线、平行...
     本专栏整理自汤国安、钱柯健、熊礼阳等教授编著的《地理信息系统基础实验操作100例》,感谢!
    

    一、实验背景

    数字化采集是生成地理信息数据的主要方法之一。通常,由具有丰富专业经验的GIS从业人员使用地理信息系统软件进行矢量数据的数字化采集工作。除了根据目视判别来绘制点、线、面图形外,还需要根据特定的数字化条件进行快速、有效的数据绘制,如根据坐标绘制直线端点、定长直线、平行线和垂直线等。本实验讲述了数字化线要素时绘制自定义直线、定长直线、平行线和垂直线的方法。

    二、实验数据

    实验数据说明如下表所示:

    图层名称 格式 坐标系 说明
    map TIF栅格 China_Lambert_Conformal_Conic 用于数字化线要素的底图数据
    line Shapefile线要素 China_Lambert_Conformal_Conic 参考矢量线数据
    newline Shapefile线要素 China_Lambert_Conformal_Conic 待数字化的矢量线数据

    三、实验步骤

    1、准备数据

    用ArcMap打开【实验一】文件夹下的地图文档【Ex1.mxd】,此地图文档包含底图map、参考线图层line和待数字化的图层newline。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    点击编辑器工具条,选择编辑器—>开始编辑选项

    在这里插入图片描述
    【创建要素】窗口中选择【newline】图层;【构造工具】中选择【线】工具

    在这里插入图片描述

    2、数字化线

    以底图黑色线为准,开始绘制直线;第一段线段可以根据两端点确定直线的规则任意绘制。

    在这里插入图片描述

    3、绘制固定端点的直线

    保持绘制状态,右键在空白处单击,弹出右键菜单,选择【绝对X,Y】工具

    在这里插入图片描述
    在弹出的【绝对X,Y】工具窗口中,依次输入地图上标识的端点X坐标和Y坐标,然后回车,完成绘制

    在这里插入图片描述

    4、绘制固定长度的直线

    保持绘制状态,右击空白处,选择【长度】工具,输入底图上标识的长度值“151”,回车;然后在底图上黑线的下一节点左键单击完成绘制
    在这里插入图片描述
    在这里插入图片描述

    5、绘制平行线

    保持绘制状态,右击line图层的最后一段线段,选择【平行】工具,然后在底图上的下一个节点处点击左键完成绘制

    在这里插入图片描述

    6、绘制垂直线

    保持绘制状态,右键单击line图层上的任意一端线段,选择【垂直】工具;此时不管鼠标如何移动,绘制的线都与右击的线段保持垂直;点击底图上下一点完成绘制;双击鼠标左键完成当前线要素的绘制;保存并停止编辑
    在这里插入图片描述

    四、实验数据下载

    下载地址
    链接:https://pan.baidu.com/s/1Qb6Lkj6ZA6BB9RgBWbNSyg
    提取码:a830

    展开全文
  • 题意:给了n条线段线段不重复,而且不是竖线就是横线,问这n条线段能围城多少个矩形。 做法:首先,由于n有5000,对半开枚举横线和竖线是不行的。 我们这样考虑,我们先把竖线和横线分别存储起来。然后可以往...

    https://codeforces.com/contest/1194/problem/E

    这道题是ZOJ1426的超级强化版,数据大了很多。给了两种解法,前一种思维简单,好理解。

    题意:给了n条线段,线段不重复,而且不是竖线就是横线,问这n条线段能围城多少个矩形。

    做法:首先,由于n有5000,对半开枚举横线和竖线是不行的。

    我们这样考虑,我们先把竖线和横线分别存储起来。然后可以往暴力一点方向想,最后在进行优化。

    稍微暴力一点的就是先判断一下,每一条竖线与多少条竖线相交,然后在判断任意两条竖线,公共的相交横线有几条,然后取一个组合数,就是对答案的一部分贡献。

    但是怎么记录呢?事实证明数组标记然后暴力判断是会T的。

    但不过有一个bitset的东西,我们开几个bitset,如果第i条竖线与第j条横线相交,那么第i个bitset的第j位置为1;

    然后判断第i和第j条竖线公共的相交横线有几条,只需要将i和j相&然后count就行了,事实证明这样的复杂度可以接受的。

    就下来的复杂的就与竖线的条数有关,最大有5000这个多半会T,事实也T了,既然竖线多了,那么横线就少了,所以可以将竖线和横线对换,这样这道题就可以过了。

    #include<bits/stdc++.h>
     
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    const int N = 200000 + 10;
    const int inf = 0x3f3f3f3f;
    struct node {
        int x1, y1, x2, y2;
    } line[N];
    vector <node> v1, v2;
    int n;
     
    int belong(node a, node b) {
        if (a.x1 >= b.x1 && a.x1 <= b.x2 && b.y1 >= a.y1 && b.y1 <= a.y2)
            return 1;
        if (b.x1 >= a.x1 && b.x1 <= a.x2 && a.y1 >= b.y1 && a.y1 <= b.y2)
            return 1;
        return 0;
    }
     
    bitset<5010> mp[5010];
     
    int main() {
     
        scanf("%d", &n);
        int a, b, c, d;
        for (int i = 1; i <= n; i++) {
            scanf("%d%d%d%d", &a, &b, &c, &d);
            if (a == c) {
                if (b > d)swap(b, d);
                v1.push_back(node{a, b, c, d});
            }
            if (b == d) {
                if (a > c)swap(a, c);
                v2.push_back(node{a, b, c, d});
            }
        }
        ll ans = 0;
        if (v1.size() > v2.size()) swap(v1, v2);
        for (int i = 0; i < v1.size(); i++) {
            for (int j = 0; j < v2.size(); j++) {
                if (belong(v1[i], v2[j]))
                    mp[i][j] = 1;
            }
            for (int j = 0; j < i; j++) {
                ll ret = (mp[i] & mp[j]).count();
                ans += ret * (ret - 1) / 2;
            }
        }
        cout << ans << endl;
        return 0;
    }

    但不过上面这个复杂度也不怎么行,还容易被卡。因此可以用一种数据结构对公共相交线进行优化。

    首先对竖线按照x进行排序,然后对第i条竖线相交的横线全部记录下来。

    然后对其按照左端点进行排序,也可以右端点。

    对于第j条竖线,进行遍历由于有序,把左端点小于j的x的横线记录下来。

    这些横线在j条竖线的y1,y2的范围相交。然后用树状数组求和就完了。

    如果不清楚画一个图就清楚了,具体这道题如何也只有本人自己做了才清楚。

    #include "bits/stdc++.h"
    
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    const int N = 2e5 + 10;
    const int M = 5002;
    
    struct line {
        int p, l, r;
    
        bool operator<(line a) const { return p < a.p; }
    } p[N], q[N];
    
    struct node {
        int p, r;
    
        bool operator<(node a) const { return r < a.r; }
    } l[N];
    
    int n, cnt1, cnt2, low[M * 2];
    
    void update(int x, int val) { for (; x < M * 2; x += x & -x) low[x] += val; }
    
    int query(int x) {
        int ret = 0;
        for (; x; x -= x & -x) ret += low[x];
        return ret;
    }
    
    int belong(line v, line h) {
        if (v.p >= h.l && v.p <= h.r && h.p >= v.l && h.p <= v.r)
            return 1;
        return 0;
    }
    
    int main() {
        scanf("%d", &n);
        int a, b, c, d;
        for (int i = 1; i <= n; i++) {
            scanf("%d%d%d%d", &a, &b, &c, &d);
            a += M, b += M, c += M, d += M;
            if (a == c) {
                if (b > d) swap(b, d);
                p[++cnt1] = line{a, b, d};
            }
            if (b == d) {
                if (a > c) swap(a, c);
                q[++cnt2] = line{b, a, c};
            }
        }
        ll ans = 0;
        sort(p + 1, p + cnt1 + 1);
        for (int i = 1; i <= cnt1; i++) {
            int cnt = 0;
            for (int j = 1; j <= cnt2; j++) {
                if (belong(p[i], q[j])) {
                    l[++cnt] = node{q[j].p, q[j].l};
                }
            }
            sort(l + 1, l + cnt + 1);
            memset(low, 0, sizeof(low));
            for (int j = 1, k = 1; j < i; j++) {
                for (; k <= cnt && l[k].r <= p[j].p; k++) update(l[k].p, 1);
                ll ret = query(p[j].r) - query(p[j].l - 1);
                ans += ret * (ret - 1) / 2;
            }
        }
        printf("%lld\n", ans);
        return 0;
    }

     

    展开全文
  • 总结平行线的判定课后测试题1、下列说法正确的有〔 〕①不相交的两条直线是平行线; ②在同一平面内,不相交的两条线段平行③过一点有且只有一条直线与已知直线平行; ④若a∥b,b∥c,则a与c不相交.A.1个 B.2个 C.3个 D....

    总结平行线的判定课后测试题

    1、下列说法正确的有〔 〕

    ①不相交的两条直线是平行线; ②在同一平面内,不相交的两条线段平行

    ③过一点有且只有一条直线与已知直线平行; ④若a∥b,b∥c,则a与c不相交.

    A.1个 B.2个 C.3个 D.4个

    2、在同一平面内,两条不重合直线的位置关系可能是〔 〕

    A.平行或相交 B.垂直或相交 C.垂直或平行 D.平行、垂直或相交

    3.如图3所示,能判断AB∥CE的条件是( )

    A.∠A=∠ACE B.∠A=∠ECD C.∠B=∠BCA D.∠B=∠ACE

    4.下列说法错误的是( )

    A.同位角不一定相等 B.内错角都相等

    C.同旁内角可能相等 D.同旁内角互补,两直线平行

    5.不相邻的两个直角,如果它们有一边在同一直线上,那么另一边相互( )

    A.平行 B.垂直 C.平行或垂直 D.平行或垂直或相交

    6、在同一平面内的.三条直线,若其中有且只有两条直线互相平行,则它们交点的个数是〔 〕

    A、0个 B、1个 C、2个 D、3个

    以上就是数学网为大家整理的平行线的判定课后测试题:精选初一下册数学,大家还满意吗?希望对大家有所帮助!

    【总结平行线的判定课后测试题】相关文章:

    展开全文
  • // 得到直线的tan斜率 double GetTanOfLine( LINE line ) { double x_dis = line.pt0.x - line.pt1.x; if ( x_dis == 0.0 ) return 10e9; return (line.pt0.y - line.pt1.y) / x_...// 得到两条平行线之间的距离 dou
    struct LINE
    {
    	CvPoint pt0;
    	CvPoint pt1;
    	LINE( CvPoint pta, CvPoint ptb )
    	{
    		pt0 = pta;
    		pt1 = ptb;
    	}
    	LINE()
    	{
    		pt0.x = pt0.y = 0;
    		pt1.x = pt1.y = 0;
    	}
    };
    
    // 得到直线的tan斜率
    double GetTanOfLine( LINE line )
    {
    	double x_dis = line.pt0.x - line.pt1.x;
    	if ( x_dis == 0.0 ) return 10e9;
    	return (line.pt0.y - line.pt1.y) / x_dis;
    }
    
    
    // 得到两条平行线之间的距离
    double GetDisOfParallelLines( LINE line0, LINE line1 )
    {
    	CvPoint midPoint = cvPoint( (line0.pt0.x + line0.pt1.x)/2, (line0.pt0.y + line0.pt1.y)/2 ); // 中点
    	double x_dis = line1.pt0.x - line1.pt1.x;
    	if ( x_dis == 0.0 ) return fabs((double)(midPoint.x - line0.pt0.x)); // 如果line1 垂直x轴
    
    	double a = (line1.pt0.y - line1.pt1.y) / x_dis;
    	double b = line1.pt0.y - (line1.pt0.x * a);
    	return fabs(a * midPoint.x - midPoint.y + b) / sqrt(a * a + 1);
    }
    
    
    // 判断两直线是否平行
    bool IsParallelLines( LINE line0, LINE line1 )
    {
    #define LIMIT (1.1547 / 3) #近似平行线的斜率之差的范围
    
    	double angleTan0 = GetTanOfLine( line0 );
    	double angleTan1 = GetTanOfLine( line1 );
    	if ( fabs(angleTan0 - angleTan1) < (double)LIMIT )
    	{
    		return 1;
    	}
    	return 0;
    }
    

    展开全文
  • 三维空间中垂直平面映射到xy平面是一条线段,三维线段映射到xy平面,得到两条xy平面的两条线段。   计算xy平面中两条线段的交点分为两部分内容: 1.判断两条线段是否相交 ...2.计算线段的交点 ...
  • 线的方向向量: 例:墙的方向向量 Line wallLine = (wall.Location as LocationCurve).Curve as Line; XYZ wallDir = wallLine.Direction; 面的法向量: XYZ faceDir = face.ComputeNormal(new UV()); 判断两个...
  • 现实中平行的直线会在照片中交于一点(完全水平的除外),通过该交点和摄像机位置的连线即可确定摄像头偏离平行线的夹角,可以参考修改为检测小车航线角(偏离车道线的夹角)。 效果图: /********************...
  • 扫描线垂直于x轴,向x轴正方向扫描,同时在y坐标轴上维护一颗线段线段树上的点y表示,一个矩s*w的矩形以y点为右上角,该矩形中有多少金矿(具体细节可以看代码),然后扫描线就可以,时间复杂度O((n+m)logm) ...
  • 三条平行线与等边三角形

    千次阅读 2019-05-15 16:56:38
    原题是:平面上有任意三条平行线,使用尺规则作图画出一个等边三角形,使三角形的三个顶点分别在三条平行线上。 画法有好多种,搜集网上的一些画法,先介绍4种,再讨论一下三角形连长与平等线距离的关系,最后讨论...
  • 相交线与平行线

    2009-02-02 11:08:09
    两角有一条公共边,他们的另一边互为反向延长线,具有这种关系的角... 两条直线相交角为90度,那么这两条线互相垂直.其中的一条直线叫做另一条直线的垂线,它们的焦点叫做垂足. 过一点有且只有一条直线与已知直线垂直. ...
  • 平行线的k斜率相等: l1: y= kx+b; l2: y =kx+c 两条互相垂直的直线,其斜率是互为负倒数. 即 k1=-1/k2. 或 k1·k2=-1. 相交点坐标 a为跟随移动的点,c为固定点,move为移动点,求过一点d与直线垂直的交点? ...
  • c#画平行线和垂线的代码

    千次阅读 2017-02-05 15:14:41
    参考如下绘制平行线的代码 private Point downPoint = Point.Empty; // 鼠标按下的坐标 private Point movePoint = Point.Empty; // 鼠标移动的坐标 private double lineSpace = 12.0f; // 线条之间的距离 private ...
  • 折线平行线的计算方法

    万次阅读 热门讨论 2005-03-09 14:32:00
    给定一个简单多边形,多边形按照顺时针或者逆时针的数许排列 内部等距离缩小或者外部放大的多边形,实际上是由距离一...做平行于L1和L2,平行线间距是L的,并且位于多边形内部的两条边,交于Qi 我们要计算出Qi的坐标
  • 在此,使用两条平行线表示路线。 1.坐标计算: 2.代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPat...
  • 若遇到平行线段左端点,则在对应的Y轴上添加该线段 若遇到平行线段右端点,则在对应的Y轴上删除该线段 若遇到垂直线段,则区间查询对应的Y轴区间上存在多少覆盖点,并累加到答案 Hint 坐标范围足够小,不需要离散化...
  • poj 1269 线段相交/平行

    2014-12-11 21:54:00
    注意原题中说的线段其实要当成没有端点的直线。被坑了= = 1 #include <cmath> 2 #include <cstdio> 3 #include <iostream> 4 #include <cstring> 5 using namespace std; 6 ....
  • 相交线 如图: 直线AB与直线CD相交,形成四个角:角1、角2、角3、角4。 角1与角2互为补角,所以角1+角2=180度;角2与角3互为补角,所以角2+角3=180度;所以角1=角3。 角1与角3顶点相对,互为对顶角,根据上面的讨论...
  • 折线平行线的计算方法(转)

    千次阅读 2017-11-11 16:51:09
    斜率一样的点需要去除;代码如下  ///  /// 顺时针:第3个点在 1,2点线段方向 左边(返回值 大于 0 ),第2个点为 阴角;第3个点在 1,2点线段方向 右边(返回值 小于 0 ),第2个...返回值 为 0 ,3点同一条线  
  • 5.1 相交线 5.1.1 相交线 ∠1和∠2有一条公共边0C,它们的另-边互为反向延长线(∠1 和∠2互补),具有这种关系的两个 角,互为邻补角(adjacent angles on a stright line). ∠1和∠3有一个公共顶点O,并且...
  • 扫描线垂直于x轴,平行于y轴。扫描线对于矩形来说很好用,这个题就是矩形。 我们以一个点为矩形左上角的点,扫出与题目矩形大小相同的矩形出来。 矩形如下 (x, y) (x + w, y) (x, y - h) (x + w...
  • 线段树扫描线练习

    2018-08-30 19:50:00
    就维护一个区间,就像一根扫描线,沿这个区间垂直的方向遍历一个矩形区域(线动成面^_^) 遇到要求的答案更新至线段树中,岂不是很优秀。 应用: 1.求矩形面积:  HDU1542  大意:给几个矩形(有重叠部分),...
  • html+js+googlemap实现源码(实现了自画折线的两条等距平行线及包围起来的多边形区域): &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt; &lt;html&gt;  &...
  • 在对图进行计算时,很常用的一个操作就是求若干条线段的交点,比如对图的叠加、截窗,需要频繁地计算线段交点,如果求交算法效率很低,上层的算法再优秀也表现不出好的性能。先考虑一个很简单的情形:只有两条线段,...
  • 本题是 线段树 + 扫描线 的典型例题, 是十分经典的模版题. 分析: 例如需要求下图所示的矩形的面积总和: 我们不妨将所有矩形的所有边都延长, 然后将整个坐标轴划分成一个个小区域: 然后再将这些小区域按照垂直于x轴...
  • POJ 1177 线段树+扫描线

    2017-08-18 09:30:45
    题意:有n个矩形,每个矩形给出它的左下...记录矩形的每一条垂直(与y轴平行)的边,按照x从小到大排序。左边的边加入线段树,右边的边移除线段树,计算总周长。 #include #include #include #include using name
  • POJ - Picture(线段树&扫描线)

    千次阅读 2019-09-05 18:03:02
    记录每个矩形的两条竖边(x1,y1,y2)和(x2,y1,y2),将所有的竖边按照x从小到大排序,然后一条一条竖边开始计算周长,那么以竖边所在的垂直于x轴的直线即是扫描线。每次移动到一条新的竖边的时候,我们需要...
  • 这个时候就是要用线段树+扫描线了 这个东西关键由以下内容构成 : 1.扫描序: 线段树维护的内容一般是每条x轴(或y轴上)在宽度限定范围内最多有几个点,要对点逐一扫描 扫描(updata)之前要根据扫描的顺序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,357
精华内容 1,742
关键字:

平行线的垂直线段