问题标签 [bezier]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1366 浏览

objective-c - 在贝塞尔曲线中放置“好”控制点

我一直在研究这个问题一段时间,到目前为止还没有想出一个好的解决方案。

问题:我有一个包含三个(或更多)二维点的有序列表,我想用三次贝塞尔曲线遍历这些点,使其“看起来不错”。“看起来不错”的部分非常简单:我只想平滑第二点处的楔形(因此,例如,曲线本身不会双回)。因此,给定三个点,在绘制曲线时,应该将两个控制点放置在三元组中的第二个点周围。

到目前为止,我的解决方案如下,但不完整。这个想法也可能有助于传达我所追求的外观。

给定三个点,(x1,y1), (x2,y2), (x3,y3)。取每个三重点所内接的圆(如果它们共线,我们只需在它们之间画一条直线并继续前进)。在点 (x2,y2) 处取与该圆相切的线——我们将围绕 (x2,y2) 的控制点放置在该切线上。

这是我坚持的最后一部分。我遇到的问题是找到一种方法将两个控制点放在这条切线上——我有一个足够好的启发式方法来判断它们应该在这条线上离 (x2,y2) 多远,但是当然,有这条线上的两个点距离那么远。如果我们计算“错误”方向的曲线,曲线会自行循环。

要找到由三个点描述的圆心(如果任何点具有相同的 x 值,只需在下面的计算中重新排序这些点):

然后,要找到切线上的点,在这种情况下,要找到从 point2 到 point3 的曲线的控制点:

0 投票
2 回答
1775 浏览

java - 连接两个 JInternalFrame 实例的 CubicCurve2D

我一直试图找到一种方法(在 Swing 中)将两个JInternalFrames 与 a CubicCurve2D(也称为三次贝塞尔曲线)连接起来。我想要达到的整体效果是一个类似于Yahoo!的界面。管道(曲线应该从一个内部框架的底部到另一个内部框架的顶部)。

这里有人做过吗?我遇到的问题是我无法弄清楚如何以用户可见的方式绘制更新曲线。绘制然后重新绘制JDesktopPane.getGraphics似乎没有任何作用。

如果可能,我想使用屏幕外缓冲区。

0 投票
2 回答
5614 浏览

javascript - 如何计算贝塞尔曲线上的控制点?

我确实有一条贝塞尔曲线,并且在某个点上,我想要第二条贝塞尔曲线以平滑的方式“分支”第一条曲线。除了计算交点(按照贝塞尔曲线的百分比),我还需要控制点(切线和权重)。使用以下 javascript 计算交点:

(非 IE 浏览器可以在 http://www.iscriptdesign.com -> Tutorial -> Groups & Paths看到它的运行情况)。我现在需要的是分支点的控制点或(切线和权重)(我不知道从哪里开始,我希望有人可以指出一些代码或数学方程,如果可能的话,作为来自相同参数的函数如上面的 getBezier 函数)。

0 投票
5 回答
6343 浏览

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

我最初发布了一个更简单(而且帮助更少)的问题,并对其进行了更具体的编辑。

来自维基百科的这个动画基本上显示了我想要完成的事情,但是 - 我希望它翻转过来,它开始向目的地前进并“向上”(在这张图片中),然后更直接地弧线到最后观点。但是,我只能访问起点和终点,我希望做的是能够通过指定“高度”(或宽度,无论你怎么称呼它)来确定其他点,以确定多高弧线实际上去了。 http://en.wikipedia.org/wiki/File:Bezier_3_big.png(由于低代表无法发布图片)

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

帮助或方向将不胜感激。

0 投票
8 回答
15697 浏览

c++ - 检查两条三次贝塞尔曲线是否相交

对于个人项目,我需要确定两条三次贝塞尔曲线是否相交。我不需要知道在哪里:我只需要知道他们是否这样做。但是,我需要快速完成。

我一直在搜寻这个地方,并找到了一些资源。大多数情况下,这里的这个问题有一个有希望的答案。

因此,在我弄清楚什么是Sylvester 矩阵、什么是行列式、什么是结果以及它为什么有用之后,我想我知道了解决方案是如何工作的。然而,现实要求有所不同,而且效果并不好。


到处乱混

我用我的图形计算器绘制了两条相交的贝塞尔样条曲线(我们称之为 B 0和 B 1)。它们的坐标如下(P 0 , P 1 , P 2 , P 3):

结果如下,B 0是“水平”曲线,B 1是另一条曲线:

两条相交的三次贝塞尔曲线

按照上述问题的最高投票答案的指示,我将 B 0减去B 1。它给我留下了两个方程(X 轴和 Y 轴),根据我的计算器,它们是:


西尔维斯特矩阵

由此我建立了以下西尔维斯特矩阵:

之后,我制作了一个 C++ 函数来使用拉普拉斯展开计算矩阵的行列式:

它似乎在相对较小的矩阵(2x2、3x3 和 4x4)上工作得很好,所以我希望它也能在 6x6 矩阵上工作。但是,我没有进行广泛的测试,并且有可能它已损坏。


问题

如果我正确理解了另一个问题的答案,那么行列式应该是 0,因为曲线相交。但是,为我的程序提供上面制作的 Sylvester 矩阵,它是 -2916。

这是我的错误还是他们的错误?找出两条三次贝塞尔曲线是否相交的正确方法是什么?

0 投票
4 回答
5913 浏览

c# - 如何返回贝塞尔曲线上的所有点?

我之前发布了一个关于仅基于起点和终点生成贝塞尔曲线的问题,感谢使用我拥有的信息创建贝塞尔曲线的答案。

这是允许我在表单上绘制所需曲线类型的代码。

有没有办法,或者有人可以帮助我返回形成曲线的所有点?我希望从这些点计算出的曲线的每个点都以点数组的形式返回,但是我没有运气弄清楚,并且无法在 stackoverflow 或 google 上找到类似的解决方案一般的。

谢谢。

0 投票
4 回答
12016 浏览

iphone - 沿着简单的三次贝塞尔曲线找到一个给定距离的点。(在 iPhone 上!)

想象一下,您有一个完全正常的四点贝塞尔曲线(两个点和两个控制点),在您的可可应用程序中使用 curveToPoint:controlPoint1:controlPoint2: 创建:

简单三次贝塞尔曲线示例
你如何沿着曲线找到点(和切线)?


稍后:对于基于以下 Michal 答案的完整、简化的解决方案,请单击:
在三次贝塞尔曲线上查找点的切线(在 iPhone 上)

只需复制并粘贴以下代码:https ://stackoverflow.com/a/31317254/294884

0 投票
2 回答
2158 浏览

opengl - 如何让这个程序在调整大小后正确绘制贝塞尔曲线?

当窗口以其原始大小(640 x 480)使用时,此代码正确绘制贝塞尔曲线,但在调整大小时不正确地呈现控制点。

在点击鼠标功能上有:

我不明白坐标系是如何处理的。

为什么使用 SCREEN_HEIGHT 转换适用于 640x480 而不适用于其他窗口尺寸?怎样才能通用?

在我自己的应用程序中,我一直在没有 glutOrtho2d 的情况下工作,并且只对每个 X、Y 进行计算,但我读过这种方法更好。我会很感激它的详细解释。

修改后的代码:

原始代码:

0 投票
5 回答
27873 浏览

ios - 求三次贝塞尔曲线上一点的切线

对于具有通常四个点 a、b、c 和 d 的三次贝塞尔曲线,

对于给定的值 t,

在那一点上如何最优雅地找到切线

0 投票
1 回答
1292 浏览

cocoa - NSBezierPath 到 NSImage 以避免 CoreAnimation

我有一个应用程序目前有这条线:

为了通过 NSBezierPath 绘制一个 GUI 元素。此行是必需的,否则当用户键入相邻(和重叠)的 NSTextField 时,myView的内容会颤抖。

我发现调用 CoreAnimation 会加载 OpenGL 框架,但不会卸载它。看到 这个问题。

我想我可以通过将NSBezierPath绘制到NSImage然后显示 NSImage 来代替 NSBezierPath 来解决这个问题,但是我还没有找到一个单一的来源来告诉我如何去做。


编辑:

我应该注意,我想在显示 NSBezierPath 之前保存它 - 因此将现有视图绘制到 NSImage的解决方案没有用。


问题:

有人可以指出我将 NSBezierPath 转换为 NSImage 的正确方向吗?