簡體   English   中英

2D陰影效果-圓上的點

[英]2D Shadow Effect - Points on circle

我目前正在嘗試對我用Python編寫的2D游戲實施平面陰影效果。 我在網上找到了大量的教程和方法( http://ncase.me/sight-and-light/ ),但是這些都使用多邊形作為障礙物,在我的游戲包括界。

我想知道如果知道A和O的情況以及圓的半徑,是否有可能計算每個接觸點(P和Q)的X和Y坐標或直線的坡度。

在此先謝謝您,如果問題不在您的歉意,但我在其他任何地方都找不到答案。

訣竅是要注意在點P處發生的情況。在點P處,線AP與圓相切,因此角度APO為90度。 同樣,AQO是90度。

現在我們知道我們有一個三角形,我們知道兩個長度和一個角度(我們知道AO,OP / OQ(相同)和APO / AQO)。

我們現在使用罪法。

 AO/sin(APO) = OP/sin(PAO)
 PAO = asin(OP*(sin(APO)/AO))

記住要注意單位(即使用90度作為輸入值,然后忘記用於罪惡的庫函數可能以弧度而非度返回)。

從這里,您可以知道三角形中所有角度的總和為180度,從而找到所有角度。 所以現在您擁有了所有三個角度。

通過以上計算得出角度AOP時,可以再次使用正弦定律來計算AP的長度。

 AP = sin(AOP) * AO / sin(APO).

請注意sin(90度)== 1(請記住,APO和AQO是90度| pi / 2弧度)。

現在我們有了AP的長度。 現在,假設A在(0,0),我們可以找到P的坐標(x,y)。 如果A不是原點,只需添加A的坐標作為偏移量。

要找到P的坐標:

 PxCoord = AxCoord + AP * cos(PAO)
 PyCoord = AyCoord + AP * sin(PAO)

提醒:請檢查觸發函數(正弦/正弦)是否使用度或弧度,如果函數使用弧度,請確保將90度轉換為弧度(pi / 2弧度)。 還要注意,如果是這種情況,您的輸出將以弧度表示該角度,並且同樣,將以pi弧度代替三角形中的180度。

讓我們向量V = OP(未知),向量Q = AP,向量U = AO(已知)
注意Q = U + V

向量V的長度是半徑R,所以

VX^2 + VY^2 = R^2   //1

向量V和A是垂直的,因此它們的標積為零

VX * QX + VY * QY = 0
VX * (VX + UX) + VY * (VY  + UY) = 0
VX * VX + VX * UX + VY * VY  + VY * UY = 0
R^2 + VX * UX + VY * UY = 0   //2

求解方程式1和2的系統並獲得解決方案

LL = U.X^2 + U.Y^2

VY = (R^2 * UY  +/- R * UX * Sqrt(LL - R^2)) / LL
VX = (R^2 - VY * UY) / UX

最后

P.X = O.X + VX
P.Y = O.Y + VY

暫無
暫無

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

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