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波到三角形网格
- 2. 如何使用sin()函数和canvas在android中绘制正弦波曲线?
- 3. haskell中的“sin sin 0.5”和“sin(sin 0.5)”有什么区别?
- 4. dygraphs y2轴重叠y2刻度
- 5. Movement EquationDeltaHeight =(Sin(RunningTime + DeltaTime) - Sin(RunningTime));
- 6. 使用python获取sin曲线值
- 7. 如何创建aa:d:b向量来创建并显示“sin(0),sin(pi/n),sin((2 * pi)/ n),...,sin(2 * pi)]”
- 8. IndexOf和SIN
- 9. C++ Sin和Cos
- 10. Android ValueAnimator Sin wave
- 11. 按钮无法绘制其坐标(x1,x2,y1,y2)的线图
- 12. C3:动态添加y2轴
- 13. maclaurin series for sin(x)
- 14. Java:Calc x in sin(x)
- 15. 如何删除回波/线
- 16. iOS的图表,波浪线
- 17. 约拉动波形线(JAVA)
- 18. Graphviz和卷曲/波浪线
- 19. 理解vscode波浪线
- 20. 如何检查(加拿大)SIN是真正的SIN?
- 21. sin(x)的汇编代码
- 22. FORTRAN中sin()的源代码
- 23. 未定义参考`sin`
- 24. 问题理解的sin(x)
- 25. 使用SageMath查找Sin(i)
- 26. Sin回归伪代码
- 27. Javascript sin函数问题
- 28. Sin,cos,弧度和旋转
- 29. 使用matplotlib.pyplot绘制点[[x1,y1],[x2,y2]]
- 30. angularjs nvd3-line-chart设置y2轴
非常感谢!超级有用和信息! – CKlidify