我在每個屏幕邊緣都有一些固定位置的圖像,我想找到一種方法能夠正確指向它們,以及MouseMoved提供的新鼠標點以及這2點和角度我可以畫出一條到達屏幕末端的線,但不幸的是我無法在圖像上正確顯示該線條點如何繪製正確指向屏幕角落圖像的線條
回答
您的程序正在嘗試做的是:
- 找到該線應該有的角度。
- 首先假定線條將會非常長,以至於它穿過矩形的邊緣。
- 然後在交叉點切斷它。
例如,假設矩形是180乘120,角度是45度。尺寸較大是180,所以你在該角度畫一條線長度180的:
所以要剪切線其中箭頭是。您的newX
和newY
都在框架之外。根據你的程序的邏輯,你會發現newX
大於1750,所以你把它切成180(在我的例子中最大幀數)。而newY
的值大於850,所以你把它切成120(在我的例子中矩形的最大值Y)。
這意味着幾乎總是會以行結束爲(180,120)而不是箭頭所在的位置。這是因爲您只調整了一個座標,但在繼續之前未找到對應的Y座標。
基本上,當您將newX
減少到getWidth() - 100
時,您還需要找到與它一致並且位於同一行的Y.所以你需要再次計算Y.相反的:
if (newX > 1720)
{
newX = getWidth() - 100;
}
你需要有
if (newX > 1720)
{
newX = getWidth() - 100;
newY = Math.round(oldY + (newX - oldX)*Math.tan(angle));
}
的newY
新值可能仍是外面的矩形。事實上,新的觀點是:
所以,現在你將調整Y的值 - 但是,你要小心,並根據同一X的值相匹配是Y角度。
但要小心:該方法不是很好開始。以Math.max(getWidth(), getHeight())
作爲線路的起始長度僅適用於某些點。但是如果你的觀點靠近一個角落而另一個角落靠近對角?矩形的對角線比寬度和高度都長。所以你會得到一條太短的線,不會到達邊緣。
你可以計算出對角線,而不是max
,但也許你應該採取不同的方法:
- 計算該行的線性公式(任何線爲)。
- 計算Y表示
x=100
和x=width-100
- 計算X爲
y=100
和y=height-100
現在你有四對X和Y,找出其中的一個是正確的。只有兩個將在框架內,只有其中一個是在正確的方向。
實際上,你不需要計算四點。如果鼠標事件中的原始
newX
位於oldX
的右側,則只能計算右邊的公式。左邊不感興趣。如果它在左邊,則只在左邊計算。如果鼠標事件中的原始newY
低於oldY
,則只計算下邊緣處的公式,並且如果它較高,則只在頂邊處計算。你會得到兩點。其中只有一個是「合法的」(x和y都在矩形中),然後使用它。
非常感謝,當我刪除那些如果條件指向看起來不錯。 – Sherif
- 1. 用畫布在屏幕角落繪製
- 2. 如何在屏幕上繪製圖像?
- 3. 屏幕角落的按鈕
- 4. Android:如何繪製圓角的線條?
- 5. 如何繪製屏幕像素
- 6. 在屏幕上的(0,0)處繪製圖像在左下角繪製
- 7. 以不正確的角度繪製線條和形狀
- 8. 轉換屏幕指向圖像點
- 9. 如何指向正確的圖像,給正確的路徑
- 10. 如何繪製帶有圓角的正方形的線條?
- 11. 我如何繪製屏幕?
- 12. 在iOS中繪製標尺 - 在屏幕上精確1釐米 - 如何繪製相距1毫米的線條?
- 13. 閃現屏幕圖像的方向不正確
- 14. HTML/Bootstrap - 在屏幕角落對齊圖像
- 15. 在圖像上繪製對角線
- 16. 如何在圖像上繪製線條/繪畫?
- 17. 我如何繪製谷歌地圖上的圖像,線條等
- 18. 如何在正確的時間和地點繪製這條線
- 19. Objective-C iOS如何將圖像繪製到屏幕
- 20. 試圖使用pygame在屏幕上繪製圖像,但屏幕是空白的?
- 21. 在另一個角落繪製圖形
- 22. 根據OpenGL中的屏幕座標繪製線條
- 23. HTML5不能正確繪製線條,但會繪製矩形
- 24. 用PyQt在圖像上繪製線條
- 25. 在拍攝圖像上繪製線條
- 26. 通過UIScrollView繪製圖像和線條
- 27. 屏幕角落中的通知
- 28. 在屏幕的角落創建CDialog
- 29. 向C#位圖繪製一個OpenGL場景;屏幕截屏
- 30. 用手指在Android屏幕上繪製
所以,如果你看到你到達屏幕的結束,你調整隻是一個座標,而不是其他? – RealSkeptic
@RealSkeptic屏幕邊緣只是衆多案例中的一個,事情是我不明白爲什麼它會這樣做,而我在數學上真的很虛弱 – Sherif
因此,隨着使用的移動,鼠標想要確定它們所關閉的點和點到那個? – MadProgrammer