2017-08-15 99 views
-3

我想取兩個點和兩個切線並求解給定x的y。但是,我在網上找到的所有資源在線上都與我需要的資源有所不同。所有的資源都允許我找到x和y,給出0和1之間的百分比。這不是我所需要的。我會盡量解釋我的意思與下面的圖片:貝塞爾曲線 - 使用(圖)X解決Y

curve

我知道這個曲線是多的貝塞爾行,但我只是想提出一個觀點。在一條非常曲線的線上展示會更容易一些。如果我嘗試在網上找到的公式中獲得.5的百分比的y輸出,我將(可能)大約得到紅點。這不是我想要的。我想在圖上解決.5,而不是使用圖的百分比。我想解決藍線問題。有誰知道我能做到這一點?另外,如果我使用循環進行循環,是否可以找到兩個y值?

如果有人給我寫一個小樣本,我使用C#和變量: Vector2 start,tan1,end,tan2; //每個都包含x和y float float time; //時間對我們要解決的(0和1之間)

 Vector2 start = new Vector2(50, 150), end = new Vector2(150, 150), tan1 = new Vector2(65, 30), tan2 = new Vector2(90, 160), delta; 
    float t = .5f; 
    delta = end - start; 
    GLDraw.DrawBezier(start, tan1, end, tan2, Color.red, 1); 
    GLDraw.DrawBox(new Rect(tan1.x - 1, tan1.y - 1, 2, 2), Color.red, 1); 
    GLDraw.DrawBox(new Rect(tan2.x - 1, tan2.y - 1, 2, 2), Color.red, 1); 
    float X = Mathf.Pow((1 - t), 3) * start.x + 3 * Mathf.Pow((1 - t), 2) * t * tan1.x + 3 * (1 - t) * Mathf.Pow(t, 2) * tan2.x + Mathf.Pow(t, 3) * end.x; 
    float Y = Mathf.Pow((1 - t), 3) * start.y + 3 * Mathf.Pow((1 - t), 3) * t * tan1.y + 3 * (1 - t) * Mathf.Pow(t, 2) * tan2.y + Mathf.Pow(t, 3) * end.y; 
    GLDraw.DrawBox(new Rect(X - 1, Y - 1, 2, 2), Color.red, 1); 

[drawnCurve[2]

+0

特別是你遇到了什麼樣的問題與代碼。我們不是一個代碼寫作服務。 –

+0

因爲它們不是經典函數圖,所以無法爲特定的「x」值求解貝塞爾曲線。你可以定義一個單一的貝塞爾曲線,它有相同'x'的3個解。但是,您可以將曲線與以'(x,0)'開始的垂直線相交併檢索所有可能的交點。 – Psi

+0

問題是我不知道完成這個任務所需的數學。但是我使用的是Unity,並且我不是直接創建Bezier曲線,而是使用了我沒有寫過的函數。我將暫時將代碼作爲編輯粘貼。 – TheNoobieWaffle

回答

1

您有未知t並給予XValue方程的曲線圖。只需打開括號並求解t的結果三次方程。請注意,公式可能有多達三種解決方案。

(1 - t)^3 * start.x + 
3 * (1 - t)^2 * t * tan1.x + 
3 * (1 - t) * t^2 * tan2.x + 
t^3 * end.x - XValue    = 0 

t^3 * (-start.x + 3 * tan1.x - 3 * tan2.x + end.x) + 
t^2 * (3*start.x - 6 * tan1.x + 3 * tan2.x) + 
t * (-3*start.x + 3 * tan1.x) + 
     (start.x - XValue)   = 0