从给定角度获取屏幕边缘的坐标

时间:2015-08-15 23:46:02

标签: java math coordinates

我知道起点(屏幕中间)和角度(在我的例子中是20°)。现在我想知道屏幕边缘的位置,就像在给定角度中从中心到边缘绘制一条不可见线。为了更好的解释,我添加了一张图片:

example

1 个答案:

答案 0 :(得分:4)

一种方法是计算半径等于或大于最大对角线的圆上的点,然后将其剪切到屏幕边界。

使用毕达哥拉斯'定理,最大对角线的长度将是

float d = Math.sqrt((width/2)*(width/2) + (height/2)*(height/2));

所以你可以像这样计算圆上的点(角度从顶部顺时针方向是弧度):

float x = Math.sin(angle) * d;
float y = -Math.cos(angle) * d;

然后你必须将矢量从原点剪切到4个边中的每个边的点,例如右边和左边:

if(x > width/2)
{
    float clipFraction = (width/2) / x; // amount to shorten the vector
    x *= clipFraction;
    y *= clipFraction;
}
else if(x < -width/2)
{
    float clipFraction = (-width/2) / x; // amount to shorten the vector
    x *= clipFraction;
    y *= clipFraction;
}

对高度/ 2和-height / 2也这样做。最后你可以将width / 2,height / 2添加到x和y以获得最终位置(屏幕中心为宽度/ 2,高度/ 2不是0,0):

x += width/2
y += height/2