找到相对于x轴的反射角

时间:2017-10-13 21:01:47

标签: java vector-graphics

我正在研究一个显示激光束的项目,它是通过反射的路径。当一个实体被激光击中时,它会调用实体alterLaser(Laser r)方法。为了创建反射光线,我必须调用Laser.createNew(x,y,逆时针角度(+ x)​​)。我的问题是我可以很容易地找到反射角,但我不知道如何找到相对于x轴的角度。

我首先尝试在激光和镜子两个矢量之间找到锐角,但我不知道它与x轴之间是否存在直接关系。在搜索互联网后,我发现了这个公式:

r = i + 2s - 180

其中r是反射光线与X轴的夹角。 i是初始光线与x轴的夹角,s是反射光线与x轴的夹角;

我发现这个公式不起作用,但在我尝试过的情况下,它给出了与预期象限不同的象限。但这带来了找到它所在的象限的新问题。

这里是我目前的代码:

@Override
protected void alterLaser(Laser r) {

    Vec laser = new Vec(r.getStartX(),r.getStartY(),r.getEndX(),r.getEndY());
    Vec mirror = new Vec(this.getStartX(),this.getStartY(),this.getEndX(),this.getEndY());

    double theta,thetaq2,thetaq3,thetaq4;
    theta = laser.angle() + (2 * mirror.absAngle()) - 180;
    theta = Vec.absTheta(theta);
    thetaq2 = 180-theta;
    thetaq3 = theta+180;
    thetaq4 = 360-theta;

    Laser.createNew(r.getEndX(),r.getEndY(),theta,null,this);
    Laser.createNew(r.getEndX(),r.getEndY(),thetaq2,null,this);
    Laser.createNew(r.getEndX(),r.getEndY(),thetaq3,null,this);
    Laser.createNew(r.getEndX(),r.getEndY(),thetaq4,null,this);

}

}

1 个答案:

答案 0 :(得分:0)

在Java中找到向量相对于正x轴逆时针方向的最简单方法是使用Math.atan2函数。 https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#atan2(double,%20double)

这会将值-pi放到pi,这样您就不必担心不同象限的特殊包装。