2
Q
SIN波線,Y2
A
回答
5
儘管看起來像一個正弦波,實際上是一個cubic Bézier curve。維基百科文章通過數學,而here是一篇文章,通過一個應該相當簡單的實現。假設你通常像在UE4藍圖中那樣水平繪製線,我會將控制點放置在水平中點,並且與每個正在控制的端點處於相同的y水平,從而創建「階梯」形狀:
p0 . . . p1 . . . .
. . . . . . . . .
. . . . p2 . . . p3
首先,您需要創建一個函數來計算給定曲線上的點。下面是文章的C#實現:
Vector3 CalculateBezierPoint(float t,
Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3)
{
float u = 1 – t;
float tt = t*t;
float uu = u*u;
float uuu = uu * u;
float ttt = tt * t;
Vector3 p = uuu * p0; //first term
p += 3 * uu * t * p1; //second term
p += 3 * u * tt * p2; //third term
p += ttt * p3; //fourth term
return p;
}
您可以更改的Vector3成2D Vector2結構,或打破它伸到x/y值,只是調整的數學補償(我道歉,它已經大約十年因爲我使用過GML,所以我不確定你需要使用哪種類型的數據結構)。
現在您已經有了計算曲線上點的方法,您可以編寫一個函數來繪製它。繪製它沒有任何缺失像素的最簡單方法是繪製一系列線段。同樣,這裏的文章中的C#實現:
q0 = CalculateBezierPoint(0, p0, p1, p2, p3);
for(int i = 1; i <= SEGMENT_COUNT; i++)
{
t = i/(float) SEGMENT_COUNT;
q1 = CalculateBezierPoint(t, p0, p1, p2, p3);
DrawLine(q0, q1);
q0 = q1;
}
有這樣做的更好的方法,但應該讓你開始,並給你一些詞彙進行進一步搜索。乾杯!
相關問題
- 1. 將Sin/Cos波添加到視圖
- 2. 添加sin波到三角形網格
- 3. 如何使用sin()函數和canvas在android中繪製正弦波曲線?
- 4. haskell中的「sin sin 0.5」和「sin(sin 0.5)」有什麼區別?
- 5. dygraphs y2軸重疊y2刻度
- 6. Movement EquationDeltaHeight =(Sin(RunningTime + DeltaTime) - Sin(RunningTime));
- 7. 使用python獲取sin曲線值
- 8. 在我的活動中添加sin/cos波的圖形
- 9. 谷歌折線上的Sin曲線組合
- 10. 連續波像波浪線的動畫
- 11. 如何創建aa:d:b向量來創建並顯示「sin(0),sin(pi/n),sin((2 * pi)/ n),...,sin(2 * pi)]」
- 12. Android ValueAnimator Sin wave
- 13. IndexOf和SIN
- 14. C++ Sin和Cos
- 15. MATLAB sin()vs sind()
- 16. 如何將線端點(X2,Y2)綁定到點?
- 17. 按鈕無法繪製其座標(x1,x2,y1,y2)的線圖
- 18. C3:動態添加y2軸
- 19. maclaurin series for sin(x)
- 20. 濾波輸出線是某些線
- 21. 理解vscode波浪線
- 22. CUDA紋理線性濾波
- 23. 如何刪除回波/線
- 24. Graphviz和捲曲/波浪線
- 25. 約拉動波形線(JAVA)
- 26. iOS的圖表,波浪線
- 27. QPainTextEdit添加波浪線
- 28. 爲什麼std :: sin()和std :: cos()比sin()和cos()慢?
- 29. 如何檢查(加拿大)SIN是真正的SIN?
- 30. FORTRAN中sin()的源代碼
非常感謝!超級有用和信息! – CKlidify