js 已知A,B,C三个点的坐标,求B的角度?

问题1:已知ABC三个点的坐标 求B的角度 ?
问题2: 如果ABC三个点可以拖拽,如果拖到 【相反角度(由图A拖拽到图B)】 如何判断和计算?
希望带上思路
图A
js 已知A,B,C三个点的坐标,求B的角度?
图B
js 已知A,B,C三个点的坐标,求B的角度?

已知 ABC三个点的坐标 求B的角度

let A = {X:0,Y:0}

let B = {X:4,Y:0}

let C = {X:4,Y:4}

getAngle(A,B,C, 'B')

求:

function getAngle(A,B,C,angle) {

// coding

}


回答:

我作为一个数学盲,看了一楼 @Yujiaao 老师的回答,特意去学了下什么是“余弦定理”:
https://zhuanlan.zhihu.com/p/...

大概了解到,用边长可以算出余弦,于是又去学习了下如何算边长:
https://zhidao.baidu.com/ques...

最后拿到余弦怎么算角度呢,于是又去学习了下:
https://jingyan.baidu.com/art...

最后,请叫我雷锋:

function getAngle(A,B,C,angle) {

// 通过坐标算边长

let a = Math.sqrt(Math.pow(C.x-B.x,2) + Math.pow(C.y-B.y,2));

let b = Math.sqrt(Math.pow(A.x-C.x,2) + Math.pow(A.y-C.y,2));

let c = Math.sqrt(Math.pow(B.x-A.x,2) + Math.pow(B.y-A.y,2));

// 通过边长算余弦

let cosA = Math.acos((b*b+c*c-a*a)/(b*c*2));

let cosB = Math.acos((a*a+c*c-b*b)/(a*c*2));

let cosC = Math.acos((a*a+b*b-c*c)/(a*b*2));

// 通过余弦算角度

return ({

A : cosA * 180 / Math.PI,

B : cosB * 180 / Math.PI,

C : cosC * 180 / Math.PI,

})[angle];

}


回答:

可以用矢量点乘,也就是余弦定理来计算

对于角B:

 a * c= |a| * |c| * cos<a,c>=a.x * c.x + a.y* c.y

所以

角B = acos((a * c)/ ( |a| * |c|) );


回答:

利用Threejs

function calculateAngle(lonlat1, lonlat2) {

var lon1=THREE.MathUtils.degToRad(lonlat1[1])

var lat1=THREE.MathUtils.degToRad(lonlat1[0])

var lon2=THREE.MathUtils.degToRad(lonlat2[1])

var lat2=THREE.MathUtils.degToRad(lonlat2[0])

if(lon1==lon2){

if (lat2 >= lat1){

return 0

}else{

return 180

}

}

if (lat1 == lat2){

if(lon2 > lon1 ){

return 90

}else if(lon2 < lon1){

return 270

}

}

var a = THREE.Math.radToDeg(Math.atan((lon2 - lon1) * Math.cos(lat2) / (lat2 - lat1)))

if(lat2 > lat1){

if(lon2 > lon1){

return a

}else{

return a + 360

}

}else{

return a + 180

}

}

以上是 js 已知A,B,C三个点的坐标,求B的角度? 的全部内容, 来源链接: utcz.com/p/936798.html

回到顶部