import { toRadians } from "src";
import { wgs84RadiiSquared } from "src-gis/gis";
import { Vec3 } from "src/math/Vec3";

/*
 * @Description  :
 * @Author       : 赵耀圣
 * @QQ           : 549184003
 * @Date         : 2021-08-04 11:39:03
 * @LastEditTime : 2021-08-04 16:02:16
 * @FilePath     : \cga.js\src-gis\math\GVec3.ts
 */

const scratchN = new Vec3();
const scratchK = new Vec3();
export class GVec3 extends Vec3 {
    static fromDegrees(longitude: number,
        latitude: number,
        height: number = 0,
        ellipsoid: Vec3 = wgs84RadiiSquared,
    ) {
        longitude = toRadians(longitude);
        latitude = toRadians(latitude);

        return GVec3.fromRadians(longitude, latitude, height, ellipsoid);
    }

    /**
     * @description : 
     * @param ellipsoid  {椭球体}
     * @return       {*}
     * @example     : 
     */
    static fromRadians(longitude: number, latitude: number,
        height: number = 0,
        ellipsoid: Vec3 = wgs84RadiiSquared) {

        var cosLatitude = Math.cos(latitude);
        scratchN.x = cosLatitude * Math.cos(longitude);
        scratchN.y = Math.sin(latitude);
        scratchN.z = cosLatitude * Math.sin(longitude);
        scratchN.normalize(); //标准球形坐标

        scratchK.copy(scratchN).multiply(ellipsoid);//各个单位
        var gamma = Math.sqrt(scratchN.dot(scratchK));
        scratchK.divideScalar(gamma);
        scratchN.multiplyScalar(height);//scratchN始终是一个标准球

        var result = new Vec3();
        return result.addVecs(scratchK, scratchN);
    }

    static toCartographic() {
    }
}