C# 如何计算只有起点和终点的贝塞尔曲线?

C# 如何计算只有起点和终点的贝塞尔曲线?,c#,.net,angle,bezier,C#,.net,Angle,Bezier,我最初发布了一个更简单(也没那么有用)的问题,并对其进行了编辑,使其更加具体 维基百科上的这幅动画基本上展示了我想要完成的事情——我希望它能被翻转过来,开始朝着目的地和“向上”(在这张图中)前进,然后更直接地弧线到终点。但是,我只能访问一个起点和终点,我希望能够通过指定“高度”(或宽度,不管你想叫它什么)来确定其他点,以确定弧的实际高度。 (由于重复率低,无法发布图像) 我希望能够调用一个具有起点、终点和高度的函数,并让它返回曲线沿线的所有点 帮助或指导将不胜感激。在.NET中似乎有一种机制可以

我最初发布了一个更简单(也没那么有用)的问题,并对其进行了编辑,使其更加具体

维基百科上的这幅动画基本上展示了我想要完成的事情——我希望它能被翻转过来,开始朝着目的地和“向上”(在这张图中)前进,然后更直接地弧线到终点。但是,我只能访问一个起点和终点,我希望能够通过指定“高度”(或宽度,不管你想叫它什么)来确定其他点,以确定弧的实际高度。 (由于重复率低,无法发布图像)

我希望能够调用一个具有起点、终点和高度的函数,并让它返回曲线沿线的所有点


帮助或指导将不胜感激。

在.NET中似乎有一种机制可以帮助您:

通过一条曲线绘制基数样条曲线 指定的点结构数组

此外,谷歌快速搜索发现了这些


    • 在.NET中似乎有一种机制可以帮助您:

      通过一条曲线绘制基数样条曲线 指定的点结构数组

      此外,谷歌快速搜索发现了这些


      除了起点和终点,您需要描述圆弧的“角度”或曲率。Bezier曲线可能很好,但通常使用较长的点序列来实现(因为圆弧的曲率由直线中的其他点定义)。看一看,在底部你可以找到一些关于“二次曲线”的信息。我打赌快速的谷歌搜索会给你一些实现的例子

      除了起点和终点,您需要描述圆弧的“角度”或曲率。Bezier曲线可能很好,但通常使用较长的点序列来实现(因为圆弧的曲率由直线中的其他点定义)。看一看,在底部你可以找到一些关于“二次曲线”的信息。我打赌快速的谷歌搜索会给你一些实现的例子

      您基本上想要一条具有三个控制点的贝塞尔曲线——起点、终点和介于两者之间的另一点

      如果起点1是
      (x1,y1)
      ,终点2是
      (x2,y2)
      ,那么从点1到点2的向量是
      (dx=x2-x1,dy=y2-y1)

      沿着线的一个点在0和1之间的量
      (x1+沿着*dx,y1+沿着*dy)

      向量
      (-dy,dx)
      与直线成直角,因此,如果您想在
      上方偏离直线一定量,则中点应为
      (x1+沿*dx-高于*dy,y1+沿*dy+高于*dx)


      改变“沿”和“上”的值,直到找到所需的倾斜曲线的类型。

      基本上,您需要一条具有三个控制点的贝塞尔曲线—起点、终点和介于两者之间的另一点

      如果起点1是
      (x1,y1)
      ,终点2是
      (x2,y2)
      ,那么从点1到点2的向量是
      (dx=x2-x1,dy=y2-y1)

      沿着线的一个点在0和1之间的量
      (x1+沿着*dx,y1+沿着*dy)

      向量
      (-dy,dx)
      与直线成直角,因此,如果您想在
      上方偏离直线一定量,则中点应为
      (x1+沿*dx-高于*dy,y1+沿*dy+高于*dx)


      改变“沿”和“高于”的值,直到找到所需的倾斜曲线的类型。

      在不丧失一般性的情况下,假设终点在x轴上,起点在终点的上方和左侧

      假设起点在悬崖顶部,终点在悬崖底部。想象你从起点水平抛一个球,这样重力会把它拉下来,使它正好撞到终点

      该曲线似乎具有您想要的特性。当球加速时,它开始变浅,然后向垂直方向增加

      通过更改最初投球的角度,可以使曲线在开始时更浅。通过改变重力的强度,你可以使它在最后变得更陡峭


      这条曲线适合你的需要吗?找到那条曲线是一个相当基本的物理问题。

      在不丧失一般性的情况下,假设终点在x轴上,起点在终点的上方和左侧

      假设起点在悬崖顶部,终点在悬崖底部。想象你从起点水平抛一个球,这样重力会把它拉下来,使它正好撞到终点

      该曲线似乎具有您想要的特性。当球加速时,它开始变浅,然后向垂直方向增加

      通过更改最初投球的角度,可以使曲线在开始时更浅。通过改变重力的强度,你可以使它在最后变得更陡峭


      这条曲线适合你的需要吗?找到那条曲线是一个相当基本的物理问题。

      我在博客上写了一篇计算贝塞尔曲线角度并确定其各个点的博客

      下面的代码显示了如何计算任意给定t值下的贝塞尔曲线点(其中t的范围为0到100%,用0-1表示)

      x=((1-t)*(1-t)*p0.x)+(2*t*(1-t)*p1.x)+(t*t*p2.x); //此语句用于确定曲线的x坐标

      y = ((1 - t) * (1 - t) * p0.Y) + (2 * t * (1 - t) * p1.Y) + (t * t * p2.Y);
      //this statement is used to determine the y coordinate of the curve. 
      
      x = Math.Round(x, 3);
      y = Math.Round(y, 3);
      angle = Math.Round(Angle(xold, yold, x, y), 3);
      
      那里w