【问题标题】:Drawing asymmetrical ellipses in HTML5 Canvas using js?使用js在HTML5 Canvas中绘制不对称椭圆?
【发布时间】:2012-07-27 21:35:20
【问题描述】:

我一直在尝试使用 HTML5 Javascript 绘制不对称椭圆,

我的第一次尝试是使用圆弧和比例,但我只能使用它生成对称椭圆,

所以我的第二次尝试是使用贝塞尔曲线。主要问题是我不明白它们是如何工作的......

最后,我得到了这样的结果:

http://jsfiddle.net/eLEUD/4/

它可以工作,但是我在那里硬编码了修改器,一旦你改变了点,它就会停止工作。我不知道如何计算它们...

谁能进一步帮助我?

【问题讨论】:

  • 你为什么不尝试使用画布库?这将使生活更轻松,而且您不需要处理重绘事件?
  • 我认为您的意思是“椭圆”而不是“椭圆”。例如,鸡蛋是椭圆形的,因为它没有精确的数学形状。 mathworld.wolfram.com/Oval.html
  • @shouvik 如果你能推荐一个可以解决这个问题的库,我很乐意去看看。
  • @ChristopherTokar 谢谢,是的,我的意思是椭圆形。

标签: javascript html geometry


【解决方案1】:

bezierCurveTo 函数实际上绘制了Cubic Bezier Curve 的最后三个节点

三次贝塞尔曲线需要绘制 4 个点:

  • P1:曲线的起点。
  • P2:曲线朝向但不接触的第一个点。
  • P3:曲线朝向但不接触的第二个点。
  • P4:曲线的终点。

鉴于此,代码如下所示(假设 P1、P2、P3、P4 是点结构):

//move to the first part of the curve
context.moveTo(P1.x, P1.y);
//draw the curve.
context.bezierCurveTo(P2.x, P2.y,
                  P3.x, P3.y,
                  P4.x, P4.y);

bezierCurveTo 函数将画布上下文所在的任何点视为第一个锚点。

至于绘制你的蛋形,你只需要摆弄它,直到你对你正在寻找的任何形状感到满意。

希望对你有帮助。


编辑

似乎您正在尝试在钻石形状内部绘制一个鸡蛋形状......所以我已经更新了你的小提琴来做到这一点。在此处查看绿色蛋形:

http://jsfiddle.net/blesh/zVWrH/1/

我所做的是计算钻石周围的其他点:东北、东北偏北等,并将它们用作锚点。

希望对你有帮助。

【讨论】:

  • 是的,问题是贝塞尔曲线只“朝向”控制点,它不通过这些点。我知道北、东、南和西点坐标,但我需要椭圆形来“填充”那个空间。所以必须根据我拥有的信息计算控制点。我只是不知道如何计算它们
  • 那么你需要做的是使用更多的曲线,老实说。它总是通过函数调用的最后一组坐标...所以 P4.x 和 P4.y 需要是您希望它通过的坐标。除了 P2 和 P3 之外,您还必须捏造一些点,才能按照您想要的方式获得曲线。
  • 我确实尝试了更多曲线,但我无法让它看起来正确。使用 2,它看起来不错,但仅使用硬编码修饰符。如果您也可以使用 4 使其看起来正确,那么我很想知道如何。
  • 嗯,你将不得不有硬编码的修饰符。你的要求是非常主观的。一方面,没有“不对称椭圆”这样的东西。我假设您正在尝试制作某种蛋形,但是有各种不同的蛋形,只有您会知道哪一个适合您。您只需要尝试许多不同的配置,直到正确为止。
  • 等等,你的意思是说,你想让它那个菱形里面吗?
猜你喜欢
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
相关资源
最近更新 更多