Javascript 角度计算只是有时出错
Javascript angle calculation only sometimes wrong
我正在使用 D3 和良好的旧 div 而不是 svg 创建折线图。部分是作为我自己的练习,也因为它很容易灵活和动态,无需监听页面大小调整。
效果很好!除了有时候。众所周知,这令人沮丧,因为它要么有效,要么无效。
我们有上一个点(如果有的话)从图表底部的垂直位置,当前点从图表底部的垂直位置,以及之间的水平 space他们。
所有计算都是占总数的百分比 space。
宽高比通过样式保持。这是用于 return 生成的倾斜样式的函数:
var angle = Math.tan(heightBetweenPoints/widthBetweenPoints);
return "skewY(" + Math.atan(angle) * (180/Math.PI) * (-1) + "deg)";
我的线条样式是:
position: absolute;
bottom:-3px;
right:0;
width:100%;
height:2px;
transform-origin:100% 100%;
大多数线路都有效...但有时却无效。
我上次触发已经一分钟了,但我相信这是正确的计算。我在想,要么是我弄错了,要么是 JavaScript 遗漏了什么。
我知道并模糊地理解 JavaScript 中的舍入问题。我也尝试过使用 math 库进行此操作,认为这可能是一个错误,但每个生成的图表似乎是相同的。
heightBetweenPoints/widthBetweenPoints
已经是切线了。 atan()
returns 与切线的角度。要解决此问题,请根据距离计算角度:
return "skewY(" + Math.atan(heightBetweenPoints / widthBetweenPoints) * (180 / Math.PI) * (-1) + "deg)";
一般情况下,从坐标计算角度时,使用Math.atan2()
方法比较安全。它 returns 也是 90° 和 270° 角的值(即当分频器为零时)。
我正在使用 D3 和良好的旧 div 而不是 svg 创建折线图。部分是作为我自己的练习,也因为它很容易灵活和动态,无需监听页面大小调整。
效果很好!除了有时候。众所周知,这令人沮丧,因为它要么有效,要么无效。
我们有上一个点(如果有的话)从图表底部的垂直位置,当前点从图表底部的垂直位置,以及之间的水平 space他们。
所有计算都是占总数的百分比 space。
宽高比通过样式保持。这是用于 return 生成的倾斜样式的函数:
var angle = Math.tan(heightBetweenPoints/widthBetweenPoints);
return "skewY(" + Math.atan(angle) * (180/Math.PI) * (-1) + "deg)";
我的线条样式是:
position: absolute;
bottom:-3px;
right:0;
width:100%;
height:2px;
transform-origin:100% 100%;
大多数线路都有效...但有时却无效。
我上次触发已经一分钟了,但我相信这是正确的计算。我在想,要么是我弄错了,要么是 JavaScript 遗漏了什么。
我知道并模糊地理解 JavaScript 中的舍入问题。我也尝试过使用 math 库进行此操作,认为这可能是一个错误,但每个生成的图表似乎是相同的。
heightBetweenPoints/widthBetweenPoints
已经是切线了。 atan()
returns 与切线的角度。要解决此问题,请根据距离计算角度:
return "skewY(" + Math.atan(heightBetweenPoints / widthBetweenPoints) * (180 / Math.PI) * (-1) + "deg)";
一般情况下,从坐标计算角度时,使用Math.atan2()
方法比较安全。它 returns 也是 90° 和 270° 角的值(即当分频器为零时)。