设为首页收藏本站

skylineglobe技术交流社区

 找回密码
 注册
查看: 57|回复: 0

如何计算三维中任意两条直线的夹角?

[复制链接]

11

主题

11

帖子

88

积分

超级版主

Rank: 8Rank: 8

积分
88
发表于 2019-11-28 16:45:26 | 显示全部楼层 |阅读模式
计算空间中两条直线的夹角,在数学中两个向量的夹角。计算公式:


有公式了之后就该获取我们需要的坐标了。
skyline本身所在的坐标是WGS84坐标,是球面坐标,所以首先需要转换为平面投影坐标系。我转换的代码如下:
  1. 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"]]';
复制代码
用于计算角度的函数如下:
  1. //计算两条直线之间的夹角
  2. //x0,y0,z0是交点坐标
  3.         function jisuan(x1, y1, z1, x0, y0, z0, x2, y2, z2) {
  4.             var anglePos = sgworld.Creator.CreatePosition(x0, y0, z0 + 0.1, 3);
  5.             //计算两条直线向量的乘积
  6.             var product = (((x0 - x1) * (x0 - x2)) + ((y0 - y1) * (y0 - y2)) + ((z0 - z1) * (z0 - z2)));
  7.             //计算一条直线的向量的模
  8.             var mo = Math.sqrt((((x0 - x1) * (x0 - x1)) + ((y0 - y1) * (y0 - y1)) + ((z0 - z1) * (z0 - z1))));
  9.             //计算另外一条直线向量的模
  10.             var mo1 = Math.sqrt((((x0 - x2) * (x0 - x2)) + ((y0 - y2) * (y0 - y2)) + ((z0 - z2) * (z0 - z2))));
  11.             //获得夹角的cos值
  12.             var cosValue = product / (mo * mo1);
  13.             //获得夹角的值,得到的值为弧度值,需要转换为度数
  14.             var radian = Math.acos(cosValue);
  15. //最后的结果
  16. return            resultAngle = Math.round(((radian / Math.PI) * 180) * 100) / 100;
  17. }
复制代码
计算完成之后回复原来的坐标系:
  1. 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋| SkylineGlobe ( 京ICP备09046777号 )   

GMT+8, 2019-12-6 20:27 , Processed in 0.070685 second(s), 22 queries .

Powered by Skyline中国社区!

© 2013 skylineglobe.cn.

快速回复 返回顶部 返回列表