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