精华内容
下载资源
问答
  • Qt绘图编辑器(涂鸦、画矩形、画椭圆形、画蝴蝶),修改颜色、打开图片、保存图片、画刷风格、画刷颜色、画笔风格、画笔颜色、画笔线宽等等
  • 大班优秀美术教案《画椭圆形》润新教育.txt
  • html5 canvas画椭圆形

    千次阅读 2015-09-16 18:04:05
    在canvas中可以很方便的用arc方法画出圆形,本来圆形也可以看作是一个宽高相等的椭圆,但canvas中根本没有画椭圆的方法,我们要用其他方法来模拟。 我们首先要明确画一个椭圆需要那些参数,基本的几何知识告诉我们...

    在canvas中可以很方便的用arc方法画出圆形,本来圆形也可以看作是一个宽高相等的椭圆,但canvas中根本没有画椭圆的方法,我们要用其他方法来模拟。

    我们首先要明确画一个椭圆需要那些参数,基本的几何知识告诉我们,椭圆需要圆心坐标,宽度,高度——或者还有旋转角度,不过这个可以暂时不要,旋转是比较容易的。

    1,使用lineTo画椭圆

    你没有看错,lineTo这样一个纯粹用来画直线的方法居然可以用来画椭圆!?但他确实存在,不过写法实在是有些不可思议:

    function DrawEllipse(Canvas,O,OA,OB){
        //画椭圆,例子:var B=new Array(150,150); DrawEllipse(hb,B,50,30);
        with (Canvas){
            var x=O[0]+OA;
            var y=O[1];
            moveTo(x,y);
            for (var i=0;i<=360;i++){
                var ii=i*Math.PI/180;
                var x=O[0]+OA*Math.cos(ii);
                var y=O[1]-OB*Math.sin(ii);
                lineTo(x,y);
            }
        }
    }

    这个方法的原理是,一个圆有360度,那么就用lineTo循环360次,画出每一度的线段,最终连成一个椭圆。其中需要用到三角函数正弦余弦进行计算。

    注意,这个方法的第2个参数是个数组,即椭圆的圆心坐标.

    思路很奇葩,而且画出的椭圆也比较平滑。但不值得大家使用——此方法每画一个椭圆,就要循环360次,只有画的椭圆稍微一多,对浏览器的性能就是个考验。

    我们只用了解一下他的思路即可

    2,使用arc画圆,然后把他缩放成一个椭圆

    这个方法的原文在此,核心函数如下:

    var canvas = document.getElementById('myCanvas');
          var context = canvas.getContext('2d');
          var centerX = 0;
          var centerY = 0;
          var radius = 50;
    
          // save state
          context.save();
    
          // translate context
          context.translate(canvas.width / 2, canvas.height / 2);
    
          // scale context horizontally
          context.scale(2, 1);
    
          // draw circle which will be stretched into an oval
          context.beginPath();
          context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);
    
          // restore to original state
          context.restore()

    此方法用了一个我前面还没讲过的canvas函数,即scale,他能实现canvas的缩放。缩放有水平和垂直两个方向,代码中把canvas水平方向放大了,而垂直方向不变,so,原来arc画出的圆形就变成了一个椭圆。

    这个方法初看甚妙,代码少,而且原理浅显易懂。但分析一下就能发现他的明显缺点了,就是——不精确!比如我需要宽171高56的椭圆,此时我们如果把arc的半径定为28的话,那么后面就要为171/28/2这个蛋疼的不知所云的数字郁闷了。

    不过有个折中的办法是始终把arc的半径设成100,然后,不够就放大,超过了就缩小。但是,还是不精确。

    3,使用贝赛尔曲线bezierCurveTo

    自从觉得上面的缩放法不精确后,我就很想找到一个精确的画椭圆的方法,最后在stackoverflow上找到了:

    function drawEllipse(ctx, x, y, w, h) {
      var kappa = 0.5522848;
          ox = (w / 2) * kappa, // control point offset horizontal
          oy = (h / 2) * kappa, // control point offset vertical
          xe = x + w,           // x-end
          ye = y + h,           // y-end
          xm = x + w / 2,       // x-middle
          ym = y + h / 2;       // y-middle
    
      ctx.beginPath();
      ctx.moveTo(x, ym);
      ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
      ctx.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
      ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
      ctx.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
      ctx.closePath();
      ctx.stroke();
    }

    这个方法可以算是比较完美的了。他把一个椭圆分成了4条贝塞尔曲线,用他们连成了一个椭圆。最后宽度高度也比较精确,开销也较少。

    但此方法依然有缺点。大家看那个kappa参数,有个很奇特的值,相信很多人在几何专家告诉你为什么他要取这个值之前,都不明白为什么非要取这个值——我到现在还是不知道。并且我有很强烈的想把他改一下看看有什么后果的冲动。

    当然我这种类似强迫症患者的冲动并不能说成是此方法的缺点,他真正的缺点是——为什么要用4条贝塞尔曲线?我个人觉得,一个椭圆明显是由两条贝塞尔曲线组成的而不是4条。这个想法最终让我找到了最完美的画椭圆的方法。

    4,使用两条贝赛尔曲线画出椭圆

    为了了解上一个方法能否精简,我专门注册了一个stackoverflow的帐号去提问,由于问题里有图片,积分不够不能传,我还迫不得已用勉勉强强的英语水平去回答老外的问题挣积分。但最终好运到了,回答一个问题就解决了我的积分问题。

    我提的贝赛尔曲线和椭圆的关系的问题在此.

    说实话,下面老外的回答我大部分没看懂,但幸亏他提供了一个代码示例页,让我明白了原理,在此对他表示再次的感谢。而根据他的解答,我找到的画椭圆的方法如下:

    //椭圆
    CanvasRenderingContext2D.prototype.oval = function  (x, y, width, height) {
        var k = (width/0.75)/2,
          w = width/2,
          h = height/2;
      this.beginPath();
      this.moveTo(x, y-h);
      this.bezierCurveTo(x+k, y-h, x+k, y+h, x, y+h);
      this.bezierCurveTo(x-k, y+h, x-k, y-h, x, y-h);
      this.closePath();
      return this;
    }

    此方法既精确,又代码少,而且也没有奇怪的难懂的地方。只需要记住这一点,椭圆的宽度与画出椭圆的贝赛尔曲线的控制点的坐标比例如下:

    贝塞尔控制点x=(椭圆宽度/0.75)/2

    这一点已经在代码中体现了。

    大家可自行试验上面的4个方法画出椭圆。

    如果你发现了更简单的方法,也请分享出来大家探讨吧。





    展开全文
  • HTML5画布椭圆形教程

    千次阅读 2014-01-24 21:18:01
    创建一个椭圆形使用HTML5画布,我们可以保存上下文状态,伸展画布背景水平,一个圆,恢复画布的状态,然后应用样式。 body { margin: 0px; padding: 0px; } var canvas = document....

    创建一个椭圆形使用HTML5画布,我们可以保存上下文状态,伸展画布背景水平,画一个圆,恢复画布的状态,然后应用样式。

    <!DOCTYPE HTML>
    <html>
      <head>
        <style>
          body {
            margin: 0px;
            padding: 0px;
          }
        </style>
      </head>
      <body>
        <canvas id="myCanvas" width="578" height="200"></canvas>
        <script>
          var canvas = document.getElementById('myCanvas');
          var context = canvas.getContext('2d');
          var centerX = 0;
          var centerY = 0;
          var radius = 50;
    
          // save state
          context.save();
    
          // translate context
          context.translate(canvas.width / 2, canvas.height / 2);
    
          // scale context horizontally
          context.scale(2, 1);
    
          // draw circle which will be stretched into an oval
          context.beginPath();
          context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);
    
          // restore to original state
          context.restore();
    
          // apply styling
          context.fillStyle = '#8ED6FF';
          context.fill();
          context.lineWidth = 5;
          context.strokeStyle = 'black';
          context.stroke();
        </script>
      </body>
    </html>


    展开全文
  • canvas中根本没有画椭圆的方法,我们要用其他方法来模拟,我们首先要明确画一个椭圆需要那些参数,基本的几何知识告诉我们,椭圆需要圆心坐标,宽度,高度——或者还有旋转角度,接下来将介绍使用lineTo画椭圆,使用...
  • 使用matplotlib.patches.Arc可以使半椭圆形,只需指定关键字theta1=0.0, theta2=180.0(或90至270)。 我写了一个名为arcs的包装函数,用于制作Arc s的散点图。 它使用PatchCollection,应该有更好的性能并启用...

    使用matplotlib.patches.Arc可以使半椭圆形,只需指定关键字theta1=0.0, theta2=180.0(或90至270)。 我写了一个名为arcs的包装函数,用于制作Arc s的散点图。 它使用PatchCollection,应该有更好的性能并启用colorbar。 你可以在gist (link)找到它。

    下面是一个例子:

    a = np.arange(11)

    arcs(a, a, w=4, h=a, rot=a*30, theta1=0.0, theta2=180.0,

    c=a, alpha=0.5, edgecolor='none')

    plt.colorbar()

    5at4I.png

    的简要实施arcs张贴下面完整性埃德·史密斯建议。

    def arcs(x, y, w, h, rot=0.0, theta1=0.0, theta2=360.0,

    c='b', **kwargs):

    import numpy as np

    import matplotlib.pyplot as plt

    from matplotlib.patches import Arc

    from matplotlib.collections import PatchCollection

    if np.isscalar(c):

    kwargs.setdefault('color', c)

    c = None

    zipped = np.broadcast(x, y, w, h, rot, theta1, theta2)

    patches = [Arc((x_, y_), w_, h_, rot_, t1_, t2_)

    for x_, y_, w_, h_, rot_, t1_, t2_ in zipped]

    collection = PatchCollection(patches, **kwargs)

    if c is not None:

    c = np.broadcast_to(c, zipped.shape).ravel()

    collection.set_array(c)

    ax = plt.gca()

    ax.add_collection(collection)

    return collection

    完整版可以在gist (link)找到。

    展开全文
  • 在OpenCV里用ellipse画椭圆形

    千次阅读 2019-12-27 10:22:23
    在OpenCV里绘制椭圆,需要使用到ellipse函数,这个函数在这里是比较复杂的参数,要一下子了解它是不容易的事情,先来看一下OpenCV里是怎么样定义它的,如下图: 从上面函数可以看到,在这里参数非常多,要理解每...

    在OpenCV里绘制椭圆,需要使用到ellipse函数,这个函数在这里是比较复杂的参数,要一下子了解它是不容易的事情,先来看一下OpenCV里是怎么样定义它的,如下图:

    从上面函数可以看到,在这里参数非常多,要理解每一个函数的作用,需要熟悉下面的示意图:

    这个函数不仅可以绘制椭圆,还可以绘一段椭圆弧,或者椭圆扇区。从上图可以看到img是要绘制图像,center是椭圆的中心点,axes是表示椭圆半轴的长短,也就是上图中的AXES WIDT

    展开全文
  • 主要介绍了CSS3 基本图形,圆形、椭圆形、三角形等的相关资料,需要的朋友可以参考下
  • css椭圆圆形边框Web animation is most often created between two points: from and to a state, or between position A and B. Moving elements in arcs, ellipses and circles is less frequently used, but it’...
  • html5 jQuery制作实现的动画展开的椭圆形导航菜单,
  • 图形 前序: 例子 ?1 FOrnrlI X PriVateVoid buttOn 1_Click( ObjeCt Sender, EVentArgs e) { _ // Label newlbl = new Label ; = "lbl; n ewlbl.Tag = "23;// n ewlbl.TextAlig n = Con te ntAlig nme nt .Mi
  • 这个程序是在vc++的环境下,利用OPENGL创建窗口画椭圆的。
  • winform程序生成圆形和椭圆形图章图片,文字可编辑,图片可保存,vs2013下编译使用,实测可用。
  • 用Python的matplotlib在一个figure里面出长方形、三角形和椭圆形 如下图: 源代码: import matplotlib.pyplot as plt import matplotlib.patches as pc fig1 = plt.figure() # 窗口1 ax1 = fig1.add_subplot...
  • /*椭圆——OvalActivity*/ // 创建画笔 Paint p3 = new Paint(); p3.setColor(Color.GREEN); RectF rectF1 = new RectF( 60 , 100 , 200 , 240 ); rectF1.set( 210 , 100 , 250 , 130 ); canvas....
  • GDI画三角形 画矩形 画圆 画椭圆

    千次阅读 2013-10-06 19:22:54
    private void test_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Pen pen = new Pen(Color.Blue, 2); Point[] pointsl = {
  • Allegro制作椭圆形flash的流程,学习制作椭圆形flash必备啊
  • 该demo实现利用自定义view实现的椭圆形的进度条
  • 1、按住左键并移动鼠标设定一矩形区域,据此绘制红色填充的椭圆; 2、设有三个图形类型选项“椭圆”、“矩形”和“三角形”,点击菜单显示对应图形,相应菜单置选中标志; 3、建立一菜单随机改变图形的填充颜色; 4...
  • OpenGL画椭圆算法

    2015-04-16 19:37:36
    OpenGL画椭圆算法
  • 椭圆形焊盘有椭圆形热风焊盘了,希望可以帮助大家
  • 绘制倾斜的椭圆形状可能会令人困惑或棘手。 这是 Matlab 命令的一个非常紧凑和简单的解决方案。
  • 自定义Drawable 实现图片圆角、圆形、椭圆形,帮助理解自定义Drawable; 自定义Drawable 实现图片圆角、圆形、椭圆形,帮助理解自定义Drawable;
  • 用AI识别椭圆形纤维

    2020-04-03 02:48:15
    我们使用机器学习中的最新技术来研究从Calabi-Yau流形的景观中是否可以区分出椭圆形纤维。 使用射影空间积(CICY3和CICY4,总计约一百万个流形)中的完整交集的数据集作为一个具体的运动场,我们发现带有前馈多层的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,792
精华内容 9,516
关键字:

如何画椭圆形