我绘制了一个宽度和长度为20x或20y的正方形,然后在半径为10x的正方形内绘制了一个圆。现在,来自圆心的光线以45度角(可以是38度或其他任何角度)穿过圆的边界。现在如何从方形获得射线和圆的连接地面的x和y距离?
我尝试了以下代码:
var radius = 10 //radius,
x = Math.cos(Math.PI * 45 / 180) * radius
y = Math.sin(Math.PI * 45 / 180) * radius
我没有用这段代码得到确切的距离,获得这个x和y距离的正确方法是什么?
答案 0 :(得分:3)
您的座标原点似乎在包围的正方形的左上方,y轴向下。
在这种情况下,
var radius = 10 //radius,
x = radius + Math.cos(Math.PI * 45 / 180) * radius
y = radius - Math.sin(Math.PI * 45 / 180) * radius
答案 1 :(得分:2)
[更新] 您可以使用以下公式获得x和y距离:
var radius = 10 //radius,
var angle = 90
var d = Math.PI/180 //to convert deg to rads
if (0 <= angle & angle <= 45){
deg = angle * d
x = radius * Math.cos(deg)
y = radius * Math.sin(deg)
}else if( 45 < angle & angle <= 90){
deg = (90-angle) * d
x = radius * Math.sin(deg)
y = radius * Math.cos(deg)
}
console.log("x = " + x)
console.log("y = " + y)
如果角度小于45°,则使用代码中所示的常规公式。
但是,如果角度大于45°,则必须使用直线和y轴之间的角度,该角度等于90-(角度值)。
我希望这能解决您的问题。
答案 2 :(得分:1)
在某人进行编辑后,您的帖子包含正确的表达式,用于从圆心(表中的“从中心”行开始)计算x和y坐标。为了使“剩余”部分到达其边界正方形的边缘(表中的“至边界”行),可以从半径中减去以下距离:
function calculate(){
var radius=document.getElementById("radius").valueAsNumber||10;
var radians=document.getElementById("degrees").valueAsNumber*Math.PI/180||0;
document.getElementById("x1").innerHTML=radius*Math.cos(radians);
document.getElementById("y1").innerHTML=radius*Math.sin(radians);
document.getElementById("x2").innerHTML=radius-radius*Math.cos(radians)
document.getElementById("y2").innerHTML=radius-radius*Math.sin(radians)
}
<input type="number" placeholder="radius" id="radius"><br>
<input type="number" placeholder="degrees" id="degrees"><br>
<button onclick="calculate()">Calculate</button><br>
<table border="1">
<tr><th></th><th>x</th><th>y</th></tr>
<tr><th>from center</th><td id="x1"></td><td id="y1"></td></tr>
<tr><th>to border</th><td id="x2"></td><td id="y2"></td></tr>
</table>