簡體   English   中英

找到相對於x軸的反射角

[英]find angle of reflection relative to x-axis

我正在做一個顯示激光束及其通過反射路徑的項目。 當實體被激光擊中時,它將調用實體alterLaser(Laser r)方法。 為了創建反射射線,我必須調用Laser.createNew(x,y,(+ x)​​逆時針旋轉的角度)。 我的問題是我可以輕松找到反射角度,但是我不知道如何找到相對於x軸的角度。

我首先嘗試在激光和反射鏡這兩個向量之間找到銳角,但是我不知道它和x軸之間是否存在直接關系。 搜索互聯網后,我發現以下公式:

r =我+ 2秒-180

其中r是反射射線與X軸的夾角。 i是初始射線與x軸的夾角,s是反射射線與x軸的夾角;

我發現此公式無效,但是在我嘗試過的情況下,它在與預期象限不同的象限中給出theta。 但這提出了新的問題,即要找到它所在的象限。

這是我當前的代碼:

@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);

}

}

在Java中找到向量相對於正x軸逆時針旋轉的角度的最簡單方法是使用Math.atan2函數。 https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#atan2(double,%20double)

這會將值放在-pipi范圍內,因此您不必擔心不同象限的特殊大小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM