设为首页收藏本站

skylineglobe技术交流社区

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

如何获取box的边框的几个坐标?

[复制链接]

9

主题

9

帖子

74

积分

超级版主

Rank: 8Rank: 8

积分
74
发表于 2019-8-4 22:06:57 | 显示全部楼层 |阅读模式
首先再新建box的时候会知道它的三个参数,分别为:height,width,length(在开发中为depth);
还需要知道它的中心点坐标,这个很好得到,var centerPos = box.Position;
知道了中心坐标就可以那这个中心坐标和三个参数得到其余的值了。
首先在自带的接口中是有获取它的左下角和右上角的坐标的方法的,但是你在使用了之后会发现它获取到的左下角和右上角的坐标始终是在Pitch、Yaw和Roll三个参数值为0的时候的值,不论你怎么旋转或者转动,你会发现得到的两个坐标值没有变化,这就需要我们自己来思考怎么获取。正好获取中心点坐标之后,它有个Move方法(所有的Position都有),我们用这个Move方法和长宽高三个值,还有Pitch、Yaw,几个值就可以得到我们想要的几个边角点坐标了。

上图所示为box,灰色代表左下角,浅绿色代表右上角。获取盒子坐标方法如下:
  1. //获取盒子的几个坐标
  2. function getBoxPos(box) {
  3.     //计算Box的中心点坐标
  4.     var cenPos = sgworld.Creator.CreatePosition(box.Position.X, box.Position.Y, box.Position.Altitude, 3);
  5.     //box左边的中点坐标
  6.     var zxcen = cenPos.Move(box.Width / 2, box.Position.Yaw - 90, 0);
  7.     //var zx = zxcen.Move(box.Depth/2,);
  8.     var zxcenq = zxcen.Move(box.Depth / 2, zxcen.Yaw + 90, box.Position.Pitch);//左下角旋转之后的坐标
  9.     var zxcenh = zxcen.Move(box.Depth / 2, zxcen.Yaw - 90, -box.Position.Pitch);//左下角下面的坐标
  10.     //box右边的中点坐标
  11.     var yxcen = cenPos.Move(box.Width / 2, box.Position.Yaw + 90, 0);
  12.     var yxcenq = yxcen.Move(box.Depth / 2, yxcen.Yaw - 90, box.Position.Pitch);//右边前角
  13.     var yxcenh = yxcen.Move(box.Depth / 2, yxcen.Yaw + 90, -box.Position.Pitch);//右下中后
  14.     var zsq = zxcenq.Move(box.Height, box.Position.Yaw, 90 - Math.abs(zxcenq.Pitch));//左下角上方
  15.     var zsh = zxcenh.Move(box.Height, box.Position.Yaw, 90 - Math.abs(zxcenh.Pitch));//左下角后方上方角
  16.     var ysq = yxcenq.Move(box.Height, box.Position.Yaw, 90 - Math.abs(yxcenq.Pitch));//右上前面
  17.     var ysh = yxcenh.Move(box.Height, box.Position.Yaw, 90 - Math.abs(yxcenh.Pitch));//右上后面
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-10-16 22:15 , Processed in 0.073130 second(s), 22 queries .

Powered by Skyline中国社区!

© 2013 skylineglobe.cn.

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