问题1:已知ABC三个点的坐标 求B的角度 ?
问题2: 如果ABC三个点可以拖拽,如果拖到 【相反角度(由图A拖拽到图B)】 如何判断和计算?
希望带上思路
图A
图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
}
问题1:已知ABC三个点的坐标 求B的角度 ?
问题2: 如果ABC三个点可以拖拽,如果拖到 【相反角度(由图A拖拽到图B)】 如何判断和计算?
希望带上思路
图A
图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
}
可以用矢量点乘,也就是余弦定理来计算
对于角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
}
}
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答4.9k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
我作为一个数学盲,看了一楼 @Yujiaao 老师的回答,特意去学了下什么是“余弦定理”:
https://zhuanlan.zhihu.com/p/...
大概了解到,用边长可以算出余弦,于是又去学习了下如何算边长:
https://zhidao.baidu.com/ques...
最后拿到余弦怎么算角度呢,于是又去学习了下:
https://jingyan.baidu.com/art...
最后,请叫我雷锋: