精华内容
下载资源
问答
  • 和面注意的点
    万次阅读
    2014-10-18 18:33:09

    一:本博客的脉络

    (1 )做了如下更正:之前在网上搜到的结果是:arcmap坐标点生成线和面 ------ 注意该功能在ArcGIS10中没有了,当时自己也没有多想就转载了,再此做一下更正或者叫做总结

    (2 )ArcGIS10  1.0.1中是这个功能不是没有了,是更换了工具而已,这个可以查看arcgis 10.1的官方帮助文件。

    (3 )得出结论,尽信书不如无书 —— 尽信网络不如无网。(难免有一些虚假信息,华南虎事件,各种八卦新闻等等。。)

    二:arcmap坐标点生成线和面 的总结

    (1 )arcgis9.x版本的:

    对于一批点坐标信息(如通过GPS获得的点位坐标),将这些坐标信息直接转换成Arcmap下面的点,或者说就是把这些点坐标直接转换成线或面,需要用到Add XY Data…工具: 
         1,将数据导入到Excel里面,总共有两列X,Y(列名可以随便取,但必须有列名),下面对应x,y坐标数据即可;
         2,将文件保存成.xls或者dbf或者csv文件。
             (1)ArcMAP下面,菜单tools-Add XY Data

             (2)这时会形成一个新图层,所有的点都添加进来了,但现在添加进来的点由于没有objectID或者FID,现在图层不具备.shp图层的大部分功能,如点的选择,编辑,关联,属性等操

             (3)在刚才生成的图层上点右键,选data-expot data…,导出成.shp文件。

        3,利用arcgis中toolbox工具中的脚本,将shp点文件转成线或面

             (1)利用write features to Text file 生成txt文件,这个文件主要是描述各个点的坐标和格式化用的.将Point 改成Polyline或Polygon,即可满足连接生成线和面。

    (2)利用Create Features From Text File工具 导入刚刚你生成的并改Polyline或Polygon的txt文件

     将INput decimal separator 改成12345678.12345或者11111111.11111也可以是其他

    txt文件格式说明:

    数据格式:
    1、Polyline后面不能有空格;(如果要生成面,将Polyline改成Polygon)
    2、数据间的空格间隔只能是一个字符;
    3、生成线的每一点要按顺序排列,按不同顺序排列会生成不同的图像;
    4、第一个点的序号从0开始编号;
    5、若要生成多条线,对每条线要编号;且要符合上述的要求,每条线的点重新从0开始编号;
    6、最后一行要加上END;
    7、将数据从EXCEL表中导出成TXT格式后,按上述要求调整好数据格式,新建一个TXT文档,将数据复制到新建的文档当中。
    8、各个点的坐标数据必须保留1位以上的小数。

    附数据格式:

    Polyline
    1 0
    0 100.0 200.0 1.#QNAN 1.#QNAN
    1 101.0 201.0 1.#QNAN 1.#QNAN
    2 102.0 202.0 1.#QNAN 1.#QNAN
    3 103.0 203.0 1.#QNAN 1.#QNAN
    4 104.0 204.0 1.#QNAN 1.#QNAN
    5 105.0 205.0 1.#QNAN 1.#QNAN
    6 106.0 206.0 1.#QNAN 1.#QNAN
    7 107.0 207.0 1.#QNAN 1.#QNAN
    8 108.0 208.0 1.#QNAN 1.#QNAN
    END
    生成多条线的数据格式:
    Polyline
    1 0
    0 2307375.5 738229.4375 1.#QNAN 1.#QNAN
    1 2307272.5 738052.875 1.#QNAN 1.#QNAN
    2 2307269.5 738043.3125 1.#QNAN 1.#QNAN
    3 2307268.75 738033.3125 1.#QNAN 1.#QNAN
    4 2307270.25 738023.375 1.#QNAN 1.#QNAN
    5 2307273.75 738014.0 1.#QNAN 1.#QNAN
    6 2307279.25 738005.625 1.#QNAN 1.#QNAN
    7 2307286.5 737998.75 1.#QNAN 1.#QNAN
    8 2307295.25 737993.5625 1.#QNAN 1.#QNAN
    9 2307304.75 737990.4375 1.#QNAN 1.#QNAN
    10 2307314.75 737989.5 1.#QNAN 1.#QNAN
    2 0
    0 2307761.25 737763.374999 1.#QNAN 1.#QNAN
    1 2307783.25 737797.624999 1.#QNAN 1.#QNAN
    2 2307786.0 737807.249999 1.#QNAN 1.#QNAN
    3 2307786.25 737817.249999 1.#QNAN 1.#QNAN
    4 2307784.0 737827.062499 1.#QNAN 1.#QNAN
    5 2307779.5 737835.937499 1.#QNAN 1.#QNAN
    END

    生成面的数据格式:

    Polygon
    1 0
    0 100.0 200.0 1.#QNAN 1.#QNAN
    1 200.0 200.0 1.#QNAN 1.#QNAN
    2 200.0 300.0 1.#QNAN 1.#QNAN
    3 100.0 300.0 1.#QNAN 1.#QNAN
    4 100.0 200.0 1.#QNAN 1.#QNAN
    END

    (2)  arcgis 10.x(10.1):

    对于一批点坐标信息(如通过GPS获得的点位坐标),将这些坐标信息直接转换成Arcmap下面的点,或者说就是把这些点坐标直接转换成线或面: 

     1,将原始数据txt或者csv数据导入到Excel里面,总共有两列X,Y(列名可以随便取,但必须有列名),下面对应x,y坐标数据即可;

      2,复制成这样一种格式,第三列第四列是对应行的下一个连接点坐标,第一行:lng1,lat1,lng2,lat2   第二行:lng2,lat2,lng3,lat3  第三行:lng3,lat3 ……      

      3,将文件保存成.xls或者dbf或者csv文件。
             (1)ArcMAP下面,菜单tools-Add XY Data
             (2)这时会形成一个新图层,所有的点都添加进来了,但现在添加进来的点由于没有objectID或者FID,现在图层不具备.shp图层的大部分功能,如点的选择,编辑,关联,属性等操作
             (3)在刚才生成的图层上点右键,选data-expot data…,导出成.shp文件。


       4,ArcToolBox-data management-features-x y to lin 把(3)中的点shp转化为线shp,即大功告成!!!

    数据格式:和9.x的一样。

    更多相关内容
  • WinCC flexible和面板的授权有哪些注意事项?zip,西门子之WinCC flexible和面板的授权有哪些注意事项?此FAQ描述了WinCC flexible的中授权和许可证的注意事项。此条目覆盖面板授权,WinCC flexible ES中和的WinCC ...
  • Arcgis 转线和面

    千次阅读 2021-01-26 15:51:12
    需求:我有一些散点坐标,想获取这些对应的线和面。问题:添加散点坐标到arcgis不是问题,直接:文件--add data--add XYdata即可。问题是如何将这些转成线和面生成线也不是问题,直接:arctoolbox ---data ...

    需求:

    我有一些散点坐标,想获取这些点对应的线和面。

    问题:

    添加散点坐标到arcgis不是问题,直接:文件--add data--add XYdata即可。问题是如何将这些点转成线和面。

    点生成线也不是问题,直接:arctoolbox ---data management tools --features -- points to line  即可。

    线生成面也不是问题,直接:arctoolbox ---data management tools --features -- feature to polygon  即可。

    点生成面?有点麻烦,也是本章重点。如下步骤:

    网上搜索,用Samples工具箱中的Create Features From Text File 和 Write Features To Text File工具添加。但是ArcToolbox工具箱中并没有Samples工具箱。这是因为它被隐藏了。

    1、找到Samples工具箱,重命名,取消隐藏

    在arcgis的安装目录下(C:\Program Files (x86)\ArcGIS\Desktop10.6\ArcToolbox\Toolboxes),可以脚本工具箱Samples,包括 Create Features From Text File 和 Write Features To Text File等工具。如果找不到,在文件窗口的查看目录下选中“隐藏的项目”遍会看到。如下图。之后,对Samples.tbx进行重命名,为“Samples .tbx”,即扩展名点之前加个空格。记住,一定要加一个空格,要不然后面加载到ArcToolbox工具箱后展示不出来里面的功能。第3步取消隐藏。

    d62eeab55e31

    2、在ArcToolbox上右键,点击Add Toolbox,找到Samples .tbx,将其加载到工具箱中。

    d62eeab55e31

    3、用Write Features To Text File将点要素写成txt。生成的txt如下。

    d62eeab55e31

    d62eeab55e31

    4、将Point 改成Polyline或Polygon,即可满足连接生成线和面。

    txt文件格式说明:1、Polyline后面不能有空格;(如果要生成面,将Polyline改成Polygon);2、数据间的空格间隔只能是一个字符;3、生成线的每一点要按顺序排列,按不同顺序排列会生成不同的图像;4、第一个点的序号从0开始编号;5、若要生成多条线,对每条线要编号;且要符合上述的要求,每条线的点重新从0开始编号;6、最后一行要加上END;7、各个点的坐标数据必须保留1位以上的小数。

    d62eeab55e31

    5、利用Create Features From Text File工具,导入刚刚生成的并改Polyline或Polygon的txt文件

    注意:将INput decimal separator 改成12345678.12345或者11111111.11111也可以是其他

    最后获取面如下:

    d62eeab55e31

    展开全文
  • 空间、线和面

    2022-07-21 18:25:02
    能够实现直线的不同创建方式(例如,两个确定一条直线,两个相交的平面确定一条直线,空间曲线的点斜式)和平面的不同创建方式(例如,三个不共线的确定一个平面,一个和一个法向量确定一个平面;空间、...
    实现三维解析几何中的点、直线和平面类,
    1 ) 能够实现直线的不同创建方式(例如,两个点确定一条直线,两个相交的平面确定一条直线,空间曲线的点斜式)和平面的 不同创建方式(例如,三个不共线的点确定一个平面,一个点和一个法向量确定一个平面;
    (2) 能够计算相应的距离:两点之间的距离,点到直线的距离,点到平面的距离;
    (3) 能够计算空间直线的单位方向向量(长度为 1 ),空间平面的 单位法向量(长度为1 );
    (4) 能够判断点和线的关系,线和线的关系,点和平面的关系, 线和平面的关系,平面和平面的关系。
    (5) 注意:要考虑计算机中实数计算的精度误差(不同精度的数 值相等判断不能使用 == )。

    提示:
          点、直线和平面分别用类来封装,每个类的数据为该表示该类 需要的参数,例如,对于空间平面的一般方程为ax+by+cz+d = 0,那么私有数据成员为 a, b, c d ; 空间直线和平面的不同创建方式定义为对应类的成员函数;  空间点和点、点和直线、点和平面、直线和直线、直线和平 面、平面和平面位置关系的判断定义为一般的函数; 要在main 函数中对上述功能进行调用和验证。

    代码如下:

    #include<iostream>
    #include<iomanip>
    #include<cmath>
    
    using namespace std;
    
    class CPoint
    {
    public:
        double dPosX;   //x坐标
        double dPosY;  //y坐标
        double dPosZ;  //z坐标
        CPoint( double x=0,double y=0,double z=0 ):dPosX(x),dPosY(y),dPosZ(z) {}
        CPoint( CPoint &cpo )
        {
            dPosX = cpo.dPosX;
            dPosY = cpo.dPosY;
            dPosZ = cpo.dPosZ;
        }
        bool operator == ( CPoint &cpo )    //判断两点是否相等
        {
            return dPosX==cpo.dPosX && dPosY==cpo.dPosY &&
                   dPosZ==cpo.dPosZ;
        }
        friend double Pdistance( CPoint &A, CPoint &B );//计算两点间距离
        ~CPoint() {}
    };
    
    /*  计算两点间距离  */
    double Pdistance( CPoint &A, CPoint &B )
    {
        return sqrt( pow(A.dPosX-B.dPosX,2) + pow(A.dPosY-B.dPosY,2) + pow(A.dPosZ-B.dPosZ,2));
    }
    
    class CLine : public CPoint
    {
    public:
        CPoint cpoA;    //A点
        CPoint cpoB;    //B点
        CLine( double x=0,double y=0,double z=0,double xx=0,double yy=0,double zz=0)
            :cpoA(x,y,z), cpoB(xx,yy,zz) {}
        CLine( CPoint &cpo1, CPoint &cpo2 ):cpoA(cpo1),cpoB(cpo2) {}
        void TwoPoint();    //两点式
        void PointDirection();  //点向式
        void Parameter();   //参数式
        void LineDirection();   //计算空间直线的单位方向向量
        friend double Ldistance( CPoint & S, CLine & L );  //计算点到直线距离
        ~CLine() {}
    };
    
    class CPlane : public CPoint
    {
    public:
        //对于一般方程ax+by+cz+d=0
        double da;
        double db;
        double dc;
        double dd;
        CPoint cpoC;    //平面上一点
        CPlane( double x=0,double y=0,double z=0,double a=0,double b=0,double c=0,double d=0)
            :cpoC(x,y,z),da(a),db(b),dc(c),dd(d) {}
        void ThreePoint();  //三点创建一个平面
        void PointNormal();  //点法式
        void PlaneNormal();  //计算空间平面的单位法向量
        friend double PLdistance( CPoint &S, CPlane &P );  //计算点到平面的距离
        ~CPlane() {}
    };
    
    /*  两点式创建直线  */
    void CLine::TwoPoint()
    {
        if( cpoA == cpoB )
        {
            cout<<"两点相同,无法构成直线"<<endl;
        }
        else
        {
            cout<<"直线方程为: ";
            cout<<"x-"<<cpoA.dPosX<<"/"<<cpoB.dPosX - cpoA.dPosX<<" = ";
            cout<<"y-"<<cpoA.dPosY<<"/"<<cpoB.dPosY - cpoA.dPosY<<" = ";
            cout<<"z-"<<cpoA.dPosZ<<"/"<<cpoB.dPosZ - cpoA.dPosZ<<endl;
        }
    }
    
    /*  点向式创建直线  */
    void CLine::PointDirection()
    {
        if( cpoA == cpoB )
        {
            cout<<"两点相同,无法构成直线"<<endl;
        }
        else
        {
            //(dm,dn,dp)为直线的方向向量
            double dm = cpoB.dPosX - cpoA.dPosX;
            double dn = cpoB.dPosY - cpoA.dPosY;
            double dp = cpoB.dPosZ - cpoA.dPosZ;
            cout<<"直线方程为: ";
            cout<<"x-"<<cpoA.dPosX<<"/"<<dm<<" = ";
            cout<<"y-"<<cpoA.dPosY<<"/"<<dn<<" = ";
            cout<<"z-"<<cpoA.dPosZ<<"/"<<dp<<endl;
        }
    }
    
    /*  参数式创建直线  */
    void CLine::Parameter()
    {
        if( cpoA == cpoB )
        {
            cout<<"两点相同,无法构成直线"<<endl;
        }
        else
        {
            //(dm,dn,dp)为直线的方向向量
            double dm = cpoB.dPosX - cpoA.dPosX;
            double dn = cpoB.dPosY - cpoA.dPosY;
            double dp = cpoB.dPosZ - cpoA.dPosZ;
            cout<<"直线方程为: ";
            cout<<"x=";
            if(dm!=0)
            {
                if(dm!=1)
                {
                    if(dm==-1)
                    {
                        cout<<"-";
                    }
                    else
                    {
                        cout<<dm;
                    }
                }
                cout<<"t";
                if(cpoA.dPosX>0)
                {
                    cout<<"+";
                }
            }
            cout<<cpoA.dPosX<<"   y=";
            if(dn!=0)
            {
                if(dn!=1)
                {
                    if(dn==-1)
                    {
                        cout<<"-";
                    }
                    else
                    {
                        cout<<dn;
                    }
                }
                cout<<"t";
                if(cpoA.dPosY>0)
                {
                    cout<<"+";
                }
            }
            cout<<cpoA.dPosY<<"   z=";
            if(dp!=0)
            {
                if(dp!=1)
                {
                    if(dp==-1)
                    {
                        cout<<"-";
                    }
                    else
                    {
                        cout<<dp;
                    }
                }
                cout<<"t";
                if(cpoA.dPosZ>0)
                {
                    cout<<"+";
                }
            }
            cout<<cpoA.dPosZ<<endl;
        }
    }
    
    /*  计算空间直线的单位方向向量  */
    void CLine::LineDirection()
    {
        //(dm,dn,dp)为直线的方向向量
        double dm = cpoB.dPosX - cpoA.dPosX;
        double dn = cpoB.dPosY - cpoA.dPosY;
        double dp = cpoB.dPosZ - cpoA.dPosZ;
        cout<<"直线的单位方向向量为: ";
        double ds = sqrt( dm*dm + dn*dn + dp*dp );
        cout<<"("<<dm/ds<<","<<dn/ds<<","<<dp/ds<<")"<<endl;
    }
    
    /*  计算点到直线距离  */
    double Ldistance( CPoint & S, CLine & L )
    {
        double dLAB = Pdistance( L.cpoA, L.cpoB );
        double dLAS = Pdistance( S, L.cpoA );
        double dLBS = Pdistance( S, L.cpoB );
        double cost = (dLAB*dLAB + dLAS*dLAS - dLBS*dLBS) / ( 2*dLAB*dLAS );
        double sint = sqrt(1-cost*cost);
        return dLAS*sint;
    }
    
    /*  三点创建一个平面  */
    void CPlane::ThreePoint()
    {
        cout<<"请输入三个点的x,y,z坐标: ";
        double x1,y1,z1,x2,y2,z2,x3,y3,z3;
        cin>>x1>>y1>>z1>>x2>>y2>>z2>>x3>>y3>>z3;
        da = y1*z2 - y1*z3 - y2*z1 + y2*z3 + y3*z1 - y3*z2;
        db = x1*z3 - x1*z2 + x2*z1 - x2*z3 - x3*z1 + x3*z2;
        dc = x1*y2 - x1*y3 - x2*y1 + x2*y3 + x3*y1 - x3*y2;
        dd = x1*y3*z2 - x1*y2*z3 + x2*y1*z3 - x2*y3*z1 - x3*y1*z2 + x3*y2*z1;
        cout<<"平面方程为: ";
        if(da!=0)
        {
            if(da!=1)
            {
                if(da==-1)
                {
                    cout<<"-";
                }
                else
                {
                    cout<<da;
                }
            }
            cout<<"x";
            if(db>=0)
            {
                cout<<"+";
            }
        }
        if(db!=0)
        {
            if(db!=1)
            {
                if(db==-1)
                {
                    cout<<"-";
                }
                else
                {
                    cout<<db;
                }
            }
            cout<<"y";
            if(dc>=0)
            {
                cout<<"+";
            }
        }
        if(dc!=0)
        {
            if(dc!=1)
            {
                if(dc==-1)
                {
                    cout<<"-";
                }
                else
                {
                    cout<<dc;
                }
            }
            cout<<"z";
            if(dd>0)
            {
                cout<<"+";
            }
        }
        if(dd!=0)
        {
            cout<<dd;
        }
        cout<<"=0"<<endl;
    }
    
    /*  点法式创建平面  */
    void CPlane::PointNormal()
    {
        cout<<"平面方程为: ";
        if(da!=0)
        {
            if(da!=1)
            {
                if(da==-1)
                {
                    cout<<"-";
                }
                else
                {
                    cout<<da;
                }
            }
            cout<<"(x";
            if(cpoC.dPosX>=0)
            {
                cout<<"-"<<cpoC.dPosX<<")+";
            }
            if(cpoC.dPosX<0)
            {
                cout<<cpoC.dPosX<<")+";
            }
        }
        if(db!=0)
        {
            if(db!=1)
            {
                if(db==-1)
                {
                    cout<<"-";
                }
                else
                {
                    cout<<db;
                }
            }
            cout<<"(y";
            if(cpoC.dPosY>=0)
            {
                cout<<"-"<<cpoC.dPosY<<")+";
            }
            if(cpoC.dPosY<0)
            {
                cout<<cpoC.dPosY<<")+";
            }
        }
        if(dc!=0)
        {
            if(dc!=1)
            {
                if(dc==-1)
                {
                    cout<<"-";
                }
                else
                {
                    cout<<dc;
                }
            }
            cout<<"(z";
            if(cpoC.dPosZ>=0)
            {
                cout<<"-"<<cpoC.dPosZ<<")=0";
            }
            if(cpoC.dPosZ<0)
            {
                cout<<cpoC.dPosZ<<")=0";
            }
        }
        cout<<endl;
    }
    
    /*  计算空间平面的单位法向量  */
    void CPlane::PlaneNormal()
    {
        double ds = sqrt( da*da + db*db +dc*dc );
        cout<<"平面的单位法向量为: ";
        cout<<"("<<da/ds<<","<<db/ds<<","<<dc/ds<<")"<<endl;
    }
    
    /*  计算点到平面的距离  */
    double PLdistance( CPoint &S, CPlane &P )
    {
        return abs( S.dPosX*P.da + S.dPosY*P.db + S.dPosZ*P.dc + P.dd) /
               sqrt( P.da*P.da + P.db*P.db + P.dc*P.dc );
    }
    
    /*  判断点与线的位置关系  */
    void JudgePL( CPoint &cpo, CLine &cli )
    {
        cout<<"点与线的位置关系为: ";
        double da1 = (cpo.dPosX-cli.cpoA.dPosX)/(cli.cpoB.dPosX-cli.cpoA.dPosX);
        double da2 = (cpo.dPosY-cli.cpoA.dPosY)/(cli.cpoB.dPosY-cli.cpoA.dPosY);
        double da3 = (cpo.dPosZ-cli.cpoA.dPosZ)/(cli.cpoB.dPosZ-cli.cpoA.dPosZ);
        if(da1==da2&&da2==da3)
        {
            cout<<"点在线上"<<endl;
        }
        else
        {
            cout<<"点在线外"<<endl;
        }
    }
    
    /*  判断线与线的位置关系  */
    void JudgeLL( CLine &cli1, CLine &cli2 )
    {
        cout<<"两线的位置关系为: ";
        if( cli1.cpoA==cli2.cpoA && cli1.cpoB==cli2.cpoB )
        {
            cout<<"两线重合"<<endl;
            return ;
        }
        double dm1 = cli1.cpoB.dPosX - cli1.cpoA.dPosX;
        double dn1 = cli1.cpoB.dPosY - cli1.cpoA.dPosY;
        double dp1 = cli1.cpoB.dPosZ - cli1.cpoA.dPosZ;
        double dm2 = cli2.cpoB.dPosX - cli2.cpoA.dPosX;
        double dn2 = cli2.cpoB.dPosY - cli2.cpoA.dPosY;
        double dp2 = cli2.cpoB.dPosZ - cli2.cpoA.dPosZ;
        if( dm1/dm2==dn1/dn2 && dn1/dn2==dp1/dp2 )
        {
            cout<<"两线平行"<<endl;
        }
        else
        {
            if( (dm1*dm2 + dn1*dn2 + dp1*dp2) == 0 )
            {
                cout<<"两线垂直"<<endl;
            }
            else
            {
                cout<<"两线相交"<<endl;
            }
        }
    }
    
    /*  判断点与面的位置关系  */
    void JudgePP( CPoint & cpo, CPlane & cpl )
    {
        cout<<"点与面的位置关系为: ";
        if( (cpo.dPosX*cpl.da + cpo.dPosY*cpl.db + cpo.dPosZ*cpl.dc + cpl.dd) == 0 )
        {
            cout<<"点在面上"<<endl;
        }
        else
        {
            cout<<"点在面外"<<endl;
        }
    }
    
    /*  判断线与面的位置关系  */
    void JudgeLP( CLine &cli, CPlane &cpl )
    {
        cout<<"线与面的位置关系为: ";
        bool b1 = (cli.cpoA.dPosX*cpl.da + cli.cpoA.dPosY*cpl.db + cli.cpoA.dPosZ*cpl.dc + cpl.dd) == 0;
        bool b2 = (cli.cpoB.dPosX*cpl.da + cli.cpoB.dPosY*cpl.db + cli.cpoB.dPosZ*cpl.dc + cpl.dd) == 0;
        if(b1&&b2)
        {
            cout<<"线在面内"<<endl;
            return ;
        }
        double dm = cli.cpoB.dPosX - cli.cpoA.dPosX;
        double dn = cli.cpoB.dPosY - cli.cpoA.dPosY;
        double dp = cli.cpoB.dPosZ - cli.cpoA.dPosZ;
        if( ( dm*cpl.da + dn*cpl.db + dp*cpl.dc ) == 0 )
        {
            cout<<"线与面平行"<<endl;
        }
        else
        {
            if(dm/cpl.da==dn/cpl.db && dn/cpl.db==dp/cpl.dc )
            {
                cout<<"线与面垂直"<<endl;
            }
            else
            {
                cout<<"线与面相交"<<endl;
            }
        }
    }
    
    /*  判断面与面的位置关系  */
    void JudgePPL( CPlane & cpl1, CPlane & cpl2 )
    {
        cout<<"面与面的位置关系为: ";
        if( cpl1.da/cpl2.da==cpl1.db/cpl2.db && cpl1.db/cpl2.db==cpl1.dc/cpl2.dc )
        {
            cout<<"面与面平行"<<endl;
        }
        else
        {
            if( (cpl1.da*cpl2.da + cpl1.db*cpl2.db + cpl1.dc*cpl2.dc) == 0 )
            {
                cout<<"面与面垂直"<<endl;
            }
            else
            {
                cout<<"面与面斜交"<<endl;
            }
        }
    }
    int main()
    {
        CPoint cpoa1(1,3,2),cpoa2(2,4,3);
    
        //计算cpoa1,cpoa2两点间距离
        double s1;
        s1=Pdistance( cpoa1, cpoa2 );
        cout<<"两点间距离为: "<<s1<<endl;
    
        CLine clia1(cpoa1,cpoa2);
        clia1.TwoPoint();    //两点式
        clia1.PointDirection();  //点向式
        clia1.Parameter();   //参数式
        clia1.LineDirection();   //计算空间直线的单位方向向量
    
        //计算点cpoa3到直线clia1距离
        CPoint cpoa3(1,2,3);
        double s2;
        s2=Ldistance( cpoa3, clia1 );
        cout<<"点到直线距离为: "<<s2<<endl;
    
        CPlane cpla1,cpla2(2,3,5,1,2,4,-28);
        cpla1.ThreePoint();  //三点创建一个平面
        cpla2.PointNormal();  //点法式
        cpla2.PlaneNormal();  //计算空间平面的单位法向量
    
        //计算点cpoa3到平面cpla2的距离
        double s3;
        s3=PLdistance( cpoa3, cpla2 );
        cout<<"点到平面的距离为: "<<s3<<endl;
    
        //判断点cpoa3与线clia1的位置关系
        JudgePL( cpoa3, clia1 );
    
        //判断线clia2与线clia3的位置关系
        CLine clia2(2,6,4,5,1,2),clia3( cpoa1, cpoa3);
        JudgeLL( clia2, clia3 );
    
        //判断点cpoa3与面cpla1的位置关系
        JudgePP( cpoa3, cpla1 );
    
        //判断线clia3与面cpla1的位置关系
        JudgeLP( clia3, cpla1 );
    
        //判断面与面的位置关系
        JudgePPL( cpla1, cpla2 );
        return 0;
    }
    

     

    展开全文
  • 注意:以下文档和示例适用于Leaflet.Deflate的最新版本。 。 安装 使用托管版本 将源代码包括在文档的head部分。 < script src =" https://unpkg.com/Leaflet.Deflate/dist/L.Deflate.js " > </ script &...
  • 注意:此客户端仍处于测试阶段,将来界面可能会更改。 推送1.0后,我们将开始支持稳定的semver API。 要求 客户端构建的目标节点> = 8,以支持异步/等待功能。 有计划创建与浏览器兼容的客户端版本。 在这种情况下...
  • arcmap坐标生成线和面

    千次阅读 2012-05-24 17:35:12
    注意该功能在ArcGIS10中没有了,也不知为什么。。。   execl数据转arcgis文件   一、创建execl文件 要求格式:第一列为点号,接着两列为X、Y坐标,表格第一行最好为ID、X、Y 二、  二...

    注意该功能在ArcGIS10中没有了,也不知为什么。。。

     

    execl点数据转arcgis点文件

     



    一、创建execl点文件

    要求格式:第一列为点号,接着两列为XY坐标,表格第一行最好为IDXY
    二、     二、导入ARCGIS
    点击tools——Add XY Date,选择表格、坐标系。
    三、     三、保存点文件
        arcgis左边的文件框中选择Sheet1$ Events文件点右键——Date——Export Date,再点ok即可

    !!!如要标注点号,选择点文件——右键——属性(最下面那个)——按照图1选择label field的项目——再单击文件右键选择label features,即可。

    execl点数据转成Arcgis线、面文件
    1、首先将EXCEL中的数据导出为TXT格式的文本方档(格式参照以下注意问题及后面的数据格式)。
    2、打开ARCGIS,点击ARCGIS工具箱,找到Samplesdata managementfeaturescreat feature from text file,各参数设置参照注意问题及数据格式。
    ARCGIS中用数据生成线及面要注意的问题
    Samplesdata managementfeaturescreat feature from text file
    Inpur decimal separator中在英文状态下输入任一字符,但不能使用空格。
    数据格式
    1Polyline后面不能有空格;(如果要生成面,将Polyline改成Polygon
    2、数据间的空格间隔只能是一个字符;
    3、生成线的每一点要按顺序排列,按不同顺序排列会生成不同的图像;
    4、第一个点的序号从0开始编号;
    5、若要生成多条线,对每条线要编号;且要符合上述的要求,每条线的点重新从0开始编号;
    6、最后一行要加上END
    7、将数据从EXCEL表中导出成TXT格式后,按上述要求调整好数据格式,新建一个TXT文档,将数据复制到新建的文档当中。
    8、各个点的坐标数据必须保留1位以上的小数。
    附数据格式:
    Polyline
    1 0
    0 100.0 200.0 1.#QNAN 1.#QNAN
    1 101.0 201.0 1.#QNAN 1.#QNAN
    2 102.0 202.0 1.#QNAN 1.#QNAN
    3 103.0 203.0 1.#QNAN 1.#QNAN
    4 104.0 204.0 1.#QNAN 1.#QNAN
    5 105.0 205.0 1.#QNAN 1.#QNAN
    6 106.0 206.0 1.#QNAN 1.#QNAN
    7 107.0 207.0 1.#QNAN 1.#QNAN
    8 108.0 208.0 1.#QNAN 1.#QNAN
    END
    生成多条线的数据格式:
    Polyline
    1 0
    0 2307375.5 738229.4375 1.#QNAN 1.#QNAN
    1 2307272.5 738052.875 1.#QNAN 1.#QNAN
    2 2307269.5 738043.3125 1.#QNAN 1.#QNAN
    3 2307268.75 738033.3125 1.#QNAN 1.#QNAN
    4 2307270.25 738023.375 1.#QNAN 1.#QNAN
    5 2307273.75 738014.0 1.#QNAN 1.#QNAN
    6 2307279.25 738005.625 1.#QNAN 1.#QNAN
    7 2307286.5 737998.75 1.#QNAN 1.#QNAN
    8 2307295.25 737993.5625 1.#QNAN 1.#QNAN
    9 2307304.75 737990.4375 1.#QNAN 1.#QNAN
    10 2307314.75 737989.5 1.#QNAN 1.#QNAN
    2 0
    0 2307761.25 737763.374999 1.#QNAN 1.#QNAN
    1 2307783.25 737797.624999 1.#QNAN 1.#QNAN
    2 2307786.0 737807.249999 1.#QNAN 1.#QNAN
    3 2307786.25 737817.249999 1.#QNAN 1.#QNAN
    4 2307784.0 737827.062499 1.#QNAN 1.#QNAN
    5 2307779.5 737835.937499 1.#QNAN 1.#QNAN
    END
    生成面的数据格式:
    Polygon
    1 0
    0 100.0 200.0 1.#QNAN 1.#QNAN
    1 200.0 200.0 1.#QNAN 1.#QNAN
    2 200.0 300.0 1.#QNAN 1.#QNAN
    3 100.0 300.0 1.#QNAN 1.#QNAN
    4 100.0 200.0 1.#QNAN 1.#QNAN
    END

     

       

     获得了一批点坐标信息(如通过GPS获得的点位坐标),将这些坐标信息直接转换成Arcmap下面的点,或者说就是把这些点坐标直接转换成线或面,需要用到Add XY Data…工具:
         

         1,将数据导入到Excel里面,总共有两列XY(列名可以随便取,但必须有列名),下面对应xy坐标数据即可;
         2
    ,将文件保存成.xls或者dbf文件。
            
     1ArcMAP下面,菜单tools-Add XY Data

             2)这时会形成一个新图层,所有的点都添加进来了,但现在添加进来的点由于没有objectIDFID,现在图层不具备.shp图层的大部分功能,如点的选择,编辑,关联,属性等操作

             3)在刚才生成的图层上点右键,选data-expot data…,导出成.shp文件。

        3,利用arcgistoolbox工具中的脚本,将shp点文件转成线或面

             1)利用write features to Text file 生成txt文件,这个文件主要是描述各个点的坐标和格式化用的.将Point 改成PolylinePolygon,即可满足连接生成线和面。

         (2)利用Create Features From Text File工具 入刚刚你生成的并改PolylinePolygontxt文件

         将INput decimal separator 改成12345678.12345或者11111111.11111可以是其他

          txt文件格式说明:1Polyline后面不能有空格;(如果要生成面,将Polyline改成Polygon);2、数据间的空格间隔只能是一个字符;3、生成线的每一点要按顺序排列,按不同顺序排列会生成不同的图像;
    4、第一个点的序号从0开始编号;5、若要生成多条线,对每条线要编号;且要符合上述的要求,每条线的点重新从0开始编号;6、最后一行要加上END7各个点的坐标数据必须保留1位以上的小数。

     

     

    附数据格式:
    Polyline
    1 0
    0 100.0 200.0 1.#QNAN 1.#QNAN
    1 101.0 201.0 1.#QNAN 1.#QNAN
    2 102.0 202.0 1.#QNAN 1.#QNAN
    3 103.0 203.0 1.#QNAN 1.#QNAN
    4 104.0 204.0 1.#QNAN 1.#QNAN
    5 105.0 205.0 1.#QNAN 1.#QNAN
    6 106.0 206.0 1.#QNAN 1.#QNAN
    7 107.0 207.0 1.#QNAN 1.#QNAN
    8 108.0 208.0 1.#QNAN 1.#QNAN
    END
    生成多条线的数据格式:
    Polyline
    1 0
    0 2307375.5 738229.4375 1.#QNAN 1.#QNAN
    1 2307272.5 738052.875 1.#QNAN 1.#QNAN
    2 2307269.5 738043.3125 1.#QNAN 1.#QNAN
    3 2307268.75 738033.3125 1.#QNAN 1.#QNAN
    4 2307270.25 738023.375 1.#QNAN 1.#QNAN
    5 2307273.75 738014.0 1.#QNAN 1.#QNAN
    6 2307279.25 738005.625 1.#QNAN 1.#QNAN
    7 2307286.5 737998.75 1.#QNAN 1.#QNAN
    8 2307295.25 737993.5625 1.#QNAN 1.#QNAN
    9 2307304.75 737990.4375 1.#QNAN 1.#QNAN
    10 2307314.75 737989.5 1.#QNAN 1.#QNAN
    2 0
    0 2307761.25 737763.374999 1.#QNAN 1.#QNAN
    1 2307783.25 737797.624999 1.#QNAN 1.#QNAN
    2 2307786.0 737807.249999 1.#QNAN 1.#QNAN
    3 2307786.25 737817.249999 1.#QNAN 1.#QNAN
    4 2307784.0 737827.062499 1.#QNAN 1.#QNAN
    5 2307779.5 737835.937499 1.#QNAN 1.#QNAN
    END
    生成面的数据格式:
    Polygon
    1 0
    0 100.0 200.0 1.#QNAN 1.#QNAN
    1 200.0 200.0 1.#QNAN 1.#QNAN
    2 200.0 300.0 1.#QNAN 1.#QNAN
    3 100.0 300.0 1.#QNAN 1.#QNAN
    4 100.0 200.0 1.#QNAN 1.#QNAN
    END

    转自: http://yetom5000.blog.163.com/blog/static/117166696201178112630239/

    展开全文
  • 前面的文章绘制点中实现了的绘制,本文说说线和面的绘制实现。 2、线数据绘制 在canvas中可以通过ctx.lineTo(x, y)和ctx.stroke()实现线的绘制。绘制线的代码如下: /** * 在地图上展示线 * @private */ ...
  • 流程介绍及注意细节: 总体结构: 1.激光slam框架loam的流程图如下。slam的过程使用帧间匹配作为里程计,但在实际工程应用中,可以与先验地图做匹配实现定位,免去了不必要的建图流程(但又会牵扯出地图更新问题,...
  • 到点法式平面投影的计算

    千次阅读 2017-11-03 14:21:20
    算法概述平面由一点O(x0,y0,z0)O(x_0,y_0,z_0)和法向量n→=(n1,n2,n3)\overrightarrow{n}=(n_1,n_2,n_3)定义,平面外一点为Pout(xp,yp,zp)P_{out}(x_p,y_p,z_p),求PP到平面的投影Q的坐标设Q的坐标为(xQ,yQ,...
  • 三维空间 线面解析

    2021-05-16 15:59:07
    文章目录简介基元类型及表示本篇思想和原则关系求解向量的夹角向量平行或垂直直线平面直线共面距离点点距离点线距离面距离线线距离线面距离面面距离两个平面求交线三个平面求交点两条直线求交点平面面积平面方程 ...
  • 测试设计及编写思路

    万次阅读 多人点赞 2019-04-19 18:30:02
    编写测试用例的策略:先后面,先局部再整体,最忌讳的是点和面混在一起,局部和整体不明。 在测试设计的时候,需要思考如下几: 1、测试操作的难度; 测试操作包括环境、配置、执行等因素,在测试设计...
  • 到面的配准算法

    千次阅读 2019-01-26 11:15:55
    1、估计表面法向量问题 =对点集的K最近邻的协方差矩阵求特征值和特征向量(PCA)问题 2、假设三维集中的任意点Pi,则 求协方差矩阵C的公式: 这里补充一下:  协方差矩阵的阶=随机向量的维数,而与随机...
  • 注意: 此种表示形式有4个参数,但平面只有3个自由度,存在过参数化问题。 在使用高斯牛顿优化时,计算出的Hessian矩阵会不满秩,也就不能求逆。所以只能使用列文伯格-马夸尔特算法(L-M)提供的正则化...
  • 已知平面上若干个的坐标。需要求出在所有的组合中,4个间平均距离的最小值(四舍五入,保留2位小数)。比如有4个:a,b,c,d, 则平均距离是指:ab, ac...注意:我们测试您的程序的时候,in.txt 可能会很大,比如包...
  • 线面拓扑关系

    千次阅读 2018-08-31 18:53:21
    / 线 /线 线/线 面 /面 线/面 面/面 1.2 线面的内部、边界、外部 I为内部(紫色部分)、B为边界(紫色部分)、E为外部(黑色部分) ...
  • 有时需要把面矢量打散成散点图,有时又需要合并有序生成一个完整的面矢量,就是这篇的主要内容了。 我用这个功能是先将面转,而后在转回面。因为转面时必须导入某一格式的txt才能识别并将相同图斑的聚集在...
  • 在你定好了面谈的日期后,到达面谈的日期前,日期和时段都是可以重新改的,如果你有事,需要调整,那么可以去修改,不过要注意,临近的日期可能因为已经订满了,所以你需要往后延期好几天。当然如果运气很好,正好有...
  • 注意内容栏,我添加了数据的shp文件可是不显示; 如果我先加载shp文件会出现: ![图片说明](https://img-ask.csdn.net/upload/202009/14/1600071414_701769.png) 然而地图却出不来,为什么呢? ...
  • HALCON 20.11:标定助手使用注意事项 标定过程中需要保持相机(光圈、焦距、位姿)固定。 标定板有两种:六角形排列标定板(.cpd文件)和矩形排列标定板(.descr文件)。 透明标定板可用于需要背光照明的应用场合。 ...
  • 在体绘制和面绘制中,经常需要对非感兴趣部位进行裁减,以减少遮挡等。 目前实现了两种方法:第一种方法速度比较慢;第二种方法可以达到实时;详细见参考文献。 详细内容后面整理,先记录下。 一、体绘制裁减 ...
  • Revit后期添加按钮和面板 今天在唐曾老师的博客上看到了这个项目以后觉得很稀奇,就自己也跟着实现了一下。我看了唐曾老师的展示视频,就自己写了功能。我看到老师留下了github地址,应该是有分享源码吧,我这个是...
  • board就会变成如下形式: board = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 2, 2, 2, 0], [0, 2, 0, 0, 0]] 我们注意到,游戏面板虽然可以用二维数组表示出来,但是应该还需要定义一些通用的行为,...
  • 混合效应模型和面板数据分析zz Flona

    千次阅读 2021-01-15 17:48:44
    注意,这时随机效应是一个群体概念,代表了一个分布的信息 or 特征,而对固定效应而言,我们所做的推断仅限于那几个固定的(未知的)参数。例如,如果要研究一些水稻的品种是否与产量有影响,如果用于分析的品种是从...
  • 图形用户界面(GUI) GUI是指采用图形方式显示的计算机操作用户界面。...窗体和面板构成了这么一个图形界面,难么这么一个窗体和面板需要设置什么呢,注意下面的代码: public class JFrame_test { public static voi
  • 排列组合公式 此外,规定0! = 1. ...示例 1:输入: [4, 1, 8, 7]输出: True解释: (8-4) * (7-1) = 24示例 2:输入: [1, 2, 1, 2]输出: False注意:除法运算符/表示实数除法,而不是整数除法。例...
  • 它对应同一时上不同空间(对象)所组成的一维数据集合,研究的是某一时上的某种经济现象,突出空间(对象)的差异。横截面数据的突出特点就是离散性高。横截面数据体现的是个体的个性,突出个体的差异,通常横截面...
  • 二、系统使用说明2.1硬件连接注意事项 1)JMDM-20DIOADD采用交流18V或直流24V供电; 2)注意严格按照产品说明书后面所附的接线图接好步进电机、驱动器、控制器、电源之间的连接线,以及启动停止手动按钮的控制线;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,965
精华内容 1,986
热门标签
关键字:

和面注意的点