【问题标题】:How to link curves [closed]如何链接曲线[关闭]
【发布时间】:2018-11-25 16:25:48
【问题描述】:

首先,让我明确一点,我对编程知之甚少。所以在我解决了这个问题之后,感谢您阅读我的问题。

所以我目前想在我的小 C# 程序中填入以下内容:

  • 从 pA 到 pX 画一条线
  • 画一条从 pX 到 pY 的曲线
  • 画一条从 pY 到 pZ 的曲线
  • 从 pZ 到 pD 画一条线

我的问题如下:

究竟如何在 C# 中从一条线“切换”到一条曲线,再切换到另一条曲线,然后再切换回一条线?

如果有人能帮我解决这个问题,我会非常高兴。

来自比利时的问候,

-g2609

【问题讨论】:

  • 哪个框架? winforms,WPF,网络?展示你到目前为止编写的代码,并描述它的问题。
  • 一般来说,我只需要点之间的x和y坐标。用于控制机器人。
  • 一条线只是曲线的边缘情况。连接线 - 线,曲线 - 线或曲线 - 曲线都没有关系。无论如何,我们需要了解更多关于输入和预期输出的信息才能在这里提供帮助。这是一个recent answer,展示了如何使用图形库从路径中获取点列表(这又可能包含一系列线/曲线,它们只是一个接一个地绘制
  • 好吧,不知道。所以基本上我会告诉机器人开始位置、结束位置和“重量点”以及从开始到结束应该走多少步。作为输出,我需要每一步的 xy 坐标
  • 别忘了 Z 坐标,它不是 discworld :)

标签: c# math line bezier curve


【解决方案1】:

您似乎想提供线段和曲线的平滑连接。

请注意,端点处的贝塞尔曲线与控制点有方向(切线)。所以只需将控制点放在直线段的延续处。从点到控制点的距离是曲率的原因。尝试使用像distXY / 3 这样的值来启动。

对于曲线-曲线连接,您必须定义一些规则。例如,定义切线方向(并再次 maginute)。如果您需要平滑的曲线链,请考虑插值样条 - 这种方法计算所有曲线的三次曲线参数并提供连续性。

行 A-X、三次贝塞尔 X-Y、行 Y-Z 的伪代码。

 VecAX = X - A
 uAX = (VecAX.X / VecAX.Length, VecAX.Y / VecAX.Length)
 curveXY.P0 = X
 curveXY.P1 = X + uAX * VecAX.Length / 3
 curveXY.P2 = Y - uXZ * VecXZ.Length / 3
 curveXY.P3 = Y

【讨论】:

  • 听起来很合理。感谢朋友的帮助
猜你喜欢
  • 1970-01-01
  • 2022-01-18
  • 2021-07-08
  • 2021-02-19
  • 2011-05-19
  • 1970-01-01
  • 2016-03-27
  • 2016-09-03
  • 2020-12-22
相关资源
最近更新 更多