canvas 画一幅画

小时候经常喜欢画这样的画,有山有水有人家。
代码有点繁冗,把重复出现的代码用函数封装起来复用会好些~
这里写图片描述

有木有感觉回到了童年?哈——哈

代码如下:

function createCanopyPath(context){
    context.beginPath();
    context.moveTo(-25,-100);
    context.lineTo(-10,-110);
    context.lineTo(-20,-110);
    context.lineTo(-5,-120);
    context.lineTo(-15,-120);

    context.lineTo(0,-135);

    context.lineTo(15,-120);
    context.lineTo(5,-120);
    context.lineTo(20,-110);
    context.lineTo(10,-110);
    context.lineTo(25,-100);
    context.lineWidth=4;
    //平滑路径
    context.lineJion='round';
    context.strokeStyle='green';
    context.fillStyle='green';
    context.fill();

    lineColor(context);
    context.fillRect(-5,-100,10,30);  

    context.save();
    context.translate(-10,10);
    context.beginPath();

    context.moveTo(0,100);
    context.quadraticCurveTo(250,0,-190,-150);
    //第二条曲线向下弯曲
    //context.quadraticCurveTo(0,0,160,-190);
    context.strokeStyle='#84c1ff';
    context.lineWidth=20;

    //连接起点闭合路径
    context.closePath();
}
function draw(){
    var canvas=document.getElementById('canvas');
    var context=canvas.getContext('2d');
    context.save();
    context.translate(50,140);
    /*绘制阴影树冠*/
    /*要先绘制阴影树,让阴影呈现在绿树的下层*/
    context.save();
    context.transform(1,0,-0.5,1,0,0);
    context.scale(1,0.8);
    context.beginPath();
    context.moveTo(-55,-120);
    context.lineTo(-40,-130);
    context.lineTo(-50,-130);
    context.lineTo(-35,-140);
    context.lineTo(-45,-140);

    context.lineTo(-30,-155);

    context.lineTo(-15,-140);
    context.lineTo(-25,-140);
    context.lineTo(-10,-130);
    context.lineTo(-20,-130);
    context.lineTo(-5,-120);
    context.lineWidth=4;
    context.strokeStyle='rgba(0,0,0,0.1)';
    context.fillStyle='rgba(0,0,0,0.1)';
    context.fill();

    /*绘制阴影树干*/
    context.fillStyle='rgba(0,0,0,0.1)';
    context.fillRect(-40,-120,10,30);

    context.restore();

   //创建表现树冠的路径
    createCanopyPath(context);

    //绘制当前路径
    context.stroke();
    context.restore();

    context.save();
    context.transform(1,0,-0.5,1,0,0);
    context.scale(1,0.8);
    context.beginPath();
    context.moveTo(180,-110);
    context.lineTo(125,-150);
    context.lineTo(70,-115);
    context.lineWidth=4;
    context.strokeStyle='rgba(0,0,0,0)';
    context.fillStyle='rgba(0,0,0,0.1)';
    context.fill();

    context.fillStyle='rgba(0,0,0,0.1)';
    context.fillRect(70,-112,70,24);
    context.stroke();
    context.restore();


    context.save();
    context.beginPath();
    context.moveTo(180,-100);
    context.lineTo(125,-135);
    context.lineTo(70,-100);
    context.lineWidth=4;
    context.strokeStyle='#bb3d00';
    context.fillStyle='#bb3d00';
    context.fill();

    context.fillStyle='#a5a552';
    context.fillRect(75,-100,100,30);

    context.fillStyle='#ff8000';
    context.fillRect(115,-90,20,20);
    context.stroke();
    context.restore();

    context.save();
    context.beginPath();
    context.moveTo(125,-70);
    context.lineTo(125,-90);
    context.lineWidth=2;
    context.strokeStyle='#bb3d00';

    context.stroke();
    context.restore();

    context.save();
    context.transform(1,0,-0.5,1,0,0);
    context.scale(1,0.8);
    context.beginPath();
     context.moveTo(-5,-32);
    context.lineTo(10,-42);
    context.lineTo(0,-42);
    context.lineTo(15,-52);
    context.lineTo(5,-52);

    context.lineTo(20,-67);

    context.lineTo(35,-52);
    context.lineTo(25,-52);
    context.lineTo(40,-42);
    context.lineTo(30,-42);
    context.lineTo(50,-32);
    context.lineWidth=4;
    context.strokeStyle='rgba(0,0,0,0)';
    context.fillStyle='rgba(0,0,0,0.1)';
    context.fill();

    /*绘制阴影树干*/
    context.fillStyle='rgba(0,0,0,0.1)';
    context.fillRect(13,-32,10,25);
    context.stroke();
    context.restore();
    context.save();

    context.beginPath();
    context.moveTo(-5,-30);
    context.lineTo(10,-40);
    context.lineTo(0,-40);
    context.lineTo(15,-50);
    context.lineTo(5,-50);

    context.lineTo(20,-65);

    context.lineTo(35,-50);
    context.lineTo(25,-50);
    context.lineTo(40,-40);
    context.lineTo(30,-40);
    context.lineTo(50,-30);
    context.lineWidth=4;
    context.strokeStyle='rgba(0,0,0,0)';
    context.fillStyle='green';

    context.fill();

    /*绘制树干*/
    lineColor(context);
    context.fillRect(15,-30,10,25);
    context.stroke();
    context.restore();

}
function lineColor(context){
            var treeShadow=context.createLinearGradient(15,-30,10,25);
            treeShadow.addColorStop(0,"#663300");
            treeShadow.addColorStop(0.4,"#996600");
            treeShadow.addColorStop(1,"#552200");
              context.fillStyle=treeShadow;

            //绘制当前路径

}

draw();

html:

  <section >
        <div class=content> 
            <canvas id="canvas"></canvas>
        </div>
    </section>

css:

 *{margin:0;padding:0;}
    section{width:800px;height:500px;margin:100px auto;background-color:yellow;}
    .content{width:100%;height:500px;background-color:green;}
    #canvas{width:100%;height:500px;background-color:#eee;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是用Python绘制一幅满天星的代码: ```python import turtle # 设置布大小 turtle.screensize(800, 600) # 设置笔的颜色和粗细 turtle.pensize(2) turtle.pencolor("#FFD700") # 绘制五角星 for _ in range(5): turtle.forward(200) turtle.right(144) # 显示绘制结果 turtle.done() ``` 运行以上代码,即可在布上绘制出一幅满天星。如果需要更改大小、颜色等参数,可以根据需要进行调整。 ### 回答2: 要用Python一幅满天星,我们可以使用turtle库来实现。这个库提供了一些简单的绘图功能,可以帮助我们出各种形状。 首先,我们需要导入turtle库,并创建一个布和一个笔。然后,我们可以使用turtle库提供的函数来绘制星星。 以下是一个示例的代码来一幅满天星: ```python import turtle # 创建布和canvas = turtle.Screen() pen = turtle.Turtle() # 设置笔的颜色和大小 pen.color('yellow') pen.pensize(3) # 绘制星星 for i in range(5): pen.forward(100) pen.right(144) # 隐藏笔 pen.hideturtle() # 关闭canvas.exitonclick() ``` 在这段代码中,我们使用了一个for循环来绘制五个角的星星。每次循环,笔向前移动100个像素,并向右转动144度,然后重复这个步骤五次,就完成了一幅满天星。 在运行这段代码之后,你会看到一个黄色的满天星在一个新窗口中被绘制出来。 希望这个答案对你有所帮助! ### 回答3: 使用Python语言可以使用turtle库或matplotlib库绘制一幅满天星的图案。 下面是使用turtle库绘制满天星的代码: ```python import turtle # 设置布大小和颜色 turtle.setup(width=800, height=600) turtle.bgcolor("black") # 定义笔的形状和颜色 turtle.shape("turtle") turtle.color("white") # 绘制满天星 for _ in range(30): turtle.forward(200) turtle.right(145) # 点击窗口关闭 turtle.exitonclick() ``` 上述代码首先导入了turtle库,然后设置了布的大小和背景颜色。接下来,定义了笔的形状为turtle,并设置笔的颜色为白色。 在循环中,通过调用forward函数让笔向前移动200个像素,再调用right函数让笔右转145度,形成星形的图案。循环重复30次,最终绘制出满天星的图案。 最后,通过执行exitonclick函数,点击窗口即可关闭绘图窗口。 用类似的方式,也可以使用matplotlib库绘制满天星的图案。这里给出的是使用turtle库的例子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值