我正在做一些影像處理,讓我們說我有一個點(例如 (1000, 1000))和一個角度(例如 30 度),我需要弄清楚我將在什么點觸摸影像的邊界( 0, y) 或 (0, x) 如果我以給定的角度從那個點走。我可以通過迭代器進行迭代并一次走一步,通過在此示例中執行以下操作:
for i in range:
x = 1000 - i * cos(30)
y = 1000 - i * sin(30)
但也許有更好的方法可以直接找到我會在哪一點碰到影像邊框?為了清晰起見,我添加了影像。
uj5u.com熱心網友回復:
讓我們稱之為(x0, y0) = (1000, 1000)你的起點。
假設您已經知道交點將在框的上側,那么您正在尋找(x, 0)這樣的點cotan(alpha) = (x - x0) * y0。
所以你可以選擇x = x0 cotan(alpha) / y0。
三角函式cotan不是python標準庫的直接一部分,但是cotan(alpha) = tan(pi/2 - alpha),所以你可以寫:
import math
x = x0 math.tan(math.pi / 2 - alpha) / y0 # angle alpha in radians
或者:
import math
x = x0 math.tan((90 - alpha_in_degrees) * math.pi / 180) / y0
如果您的框是由坐標定義的(left, right, top, bottom) = (0, ?, 0, ?),那么您可以通過檢查計算的值x是否在范圍內,并且alpha在 0 到 180° 之間來檢查該點是否確實在框的頂部:
assert(left <= x <= right and 0 <= alpha_in_degrees <= 180)
uj5u.com熱心網友回復:
是時候學習一些三角學了,考慮如下三角形
|\
| \
| \
| \
| a\
-----
它的高度已知為1000,寬度未知,因此用 表示x,角度a值已知。tan在這種情況下tan(a) = 1000/x,函式值被定義為相對和相鄰之間的比率,相當于tan(a)*x = 1000相當于x = 1000/tan(a)。
找到x記住后,您需要從 1000 中減去它,作為您相對于 (1000,1000) 的計算位置
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312876.html
上一篇:Java將陣列添加到陣列特殊模式
