铯直角3和角度

时间:2019-12-26 06:52:09

标签: math angle cesium

我在想要绘制矩形的地方有以下代码:

Sandcastle

基本上使用这个:

var area = {
    ll: {longitude: 139.33435143, latitude: 35.5385006, altitude: 0},
    dir: {longitude: 139.33547146, latitude: 35.54034106, altitude: 0},
    lllr: 300,
    llul: 470,
};
  • ll是矩形的LowerLeft点的坐标
  • dir是从LowerLeft点到矩形左上角的方向
  • llullllr是距离

我面临的问题如下:

    var origin = new Cesium.Cartesian2(area.ll.longitude, area.ll.latitude);
    var xAxis = new Cesium.Cartesian2(area.dir.longitude - area.ll.longitude, area.dir.latitude - area.ll.latitude);
    var yAxis = new Cesium.Cartesian2(
        Math.cos(Math.PI /2) * xAxis.x - Math.sin(Math.PI /2) * xAxis.y, 
        Math.sin(Math.PI /2) * xAxis.x + Math.cos(Math.PI /2) * xAxis.y
    );

这应该给我一个originPoint,即xAxis和yAxis的方向。很好,如果我画线,我有正确的90angle。

但是当我尝试传递Cartesian3

var originPoint = new Cesium.Cartesian3.fromDegrees(origin.x, origin.y, 0);
var xVector = new Cesium.Cartesian3.fromDegrees(origin.x + xAxis.x, origin.y + xAxis.y, 0);
var yVector = new Cesium.Cartesian3.fromDegrees(origin.x + yAxis.x, origin.y + yAxis.y, 0); 

var lrDir = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(xVector, originPoint, new Cesium.Cartesian3()), new Cesium.Cartesian3());
var lrSum = Cesium.Cartesian3.multiplyByScalar(lrDir, area.lllr, new Cesium.Cartesian3());
var lowerRight = Cesium.Cartesian3.add(originPoint, lrSum, new Cesium.Cartesian3());

var ulDir = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(yVector, originPoint, new Cesium.Cartesian3()), new Cesium.Cartesian3());
var ulSum = Cesium.Cartesian3.multiplyByScalar(ulDir, area.llul, new Cesium.Cartesian3());
var upperLeft = Cesium.Cartesian3.add(originPoint, ulSum, new Cesium.Cartesian3());

正如您在沙堡中看到的那样,它不会绘制矩形,而是会绘制90°角的东西。

我不太清楚这个问题。

0 个答案:

没有答案