//각도를 알때 특정 지점의 좌표는
//(cos(라디안),sin(라디안))이다. 이때 라디안은 실제각에 파이/180을 곱한다.
//star_height.html은 위 공식을 소스로 적용하였고
//위 공식을 기반으로 3차 행렬에서도 행렬곱을 사용하여 특정 지점의 좌표를 구하는 공식이 있다.
//예를들어 아래와 같은 X,Y축 좌표를 담는 3X1 행렬이 있다.
//[X]
//[Y]
//[1]
//이때 0(세타)각만큼 회전한 X`,Y` 좌표를 구하고싶다면 아래와 같은 행렬을 곱한다
//[Cos0, -Sin0, 0]
//[Sin0, Cos0, 0]
//[a , b , 1]
//그럼 결과적으로
//[X`]
//[Y`]
//[1]
//0(세타)각만큼 회전한 x`,y`좌표를 포함한 행렬이 나온다.
//이를 아래와같이 코드화한다.
var center_x = cartographic.longitudeDD; //경도=세로선=x축
var center_y = cartographic.latitudeDD; //위도=가로선=y축
var radius = 0.2;
var subAngle = 360 / (vertextNum * 2);
var angle = 0;
//var cos = Math.cos(angle * Math.PI/180);
var ar = new Array();
for (var i = 0; i < vertextNum * 2; i++) {
var _radius = radius;
if (i % 2 != 0) _radius = _radius / 2;
//3x1 행렬 생성
var p = new cesium.common.Cartesian3(_radius, _radius, 1);
//위에말한 3x3행렬은 아래와같이 Matrix3.fromRotationZ에 구현되어있고,파라미터로 각(라디안)을 넣는다.
var m = cesium.common.Matrix3.fromRotationZ(cesium.common.Math.toRadians(angle));
//두개를 곱하면 변환점이 나온다
var rotated = ws3d.common.Matrix3.multiplyByVector(m, p, new cesium.common.Cartesian3());
//console.log(cesium);
var coord = new cesium.common.OgcPoint(center_x + rotated.x, center_y + rotated.y);
angle += subAngle;
ar.push(coord);
}
※ 삼각함수와 라디안을 이용한 '각도로 특정좌표 계산'