|
计算空间中两条直线的夹角,在数学中两个向量的夹角。计算公式:
有公式了之后就该获取我们需要的坐标了。
skyline本身所在的坐标是WGS84坐标,是球面坐标,所以首先需要转换为平面投影坐标系。我转换的代码如下:- sgworld.CoordServices.SourceCoordinateSystem.WellKnownText = 'PROJCS["WGS 84 / World Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","3395"]]';
复制代码 用于计算角度的函数如下:- //计算两条直线之间的夹角
- //x0,y0,z0是交点坐标
- function jisuan(x1, y1, z1, x0, y0, z0, x2, y2, z2) {
- var anglePos = sgworld.Creator.CreatePosition(x0, y0, z0 + 0.1, 3);
- //计算两条直线向量的乘积
- var product = (((x0 - x1) * (x0 - x2)) + ((y0 - y1) * (y0 - y2)) + ((z0 - z1) * (z0 - z2)));
- //计算一条直线的向量的模
- var mo = Math.sqrt((((x0 - x1) * (x0 - x1)) + ((y0 - y1) * (y0 - y1)) + ((z0 - z1) * (z0 - z1))));
- //计算另外一条直线向量的模
- var mo1 = Math.sqrt((((x0 - x2) * (x0 - x2)) + ((y0 - y2) * (y0 - y2)) + ((z0 - z2) * (z0 - z2))));
- //获得夹角的cos值
- var cosValue = product / (mo * mo1);
- //获得夹角的值,得到的值为弧度值,需要转换为度数
- var radian = Math.acos(cosValue);
- //最后的结果
- return resultAngle = Math.round(((radian / Math.PI) * 180) * 100) / 100;
- }
复制代码 计算完成之后回复原来的坐标系:- sgworld.CoordServices.SourceCoordinateSystem.WellKnownText = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]';
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|