国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

canvas基礎(chǔ)2 -- 形狀、簡單場景

這篇具有很好參考價值的文章主要介紹了canvas基礎(chǔ)2 -- 形狀、簡單場景。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?七巧板

七巧板本質(zhì)上就是 分別由幾個直線 拼成一個個圖形,再將這些圖形結(jié)合起來

var tangram = [
      { p: [{ x: 0, y: 0 }, { x: 800, y: 0 }, { x: 400, y: 400 }], color: "#caff67" },
      { p: [{ x: 0, y: 0 }, { x: 400, y: 400 }, { x: 0, y: 800 }], color: "#67beef" },
      { p: [{ x: 800, y: 0 }, { x: 800, y: 400 }, { x: 600, y: 600 }, { x: 600, y: 200 }], color: "#ef3d61" },
      { p: [{ x: 600, y: 200 }, { x: 600, y: 600 }, { x: 400, y: 400 }], color: "#f9f5la" },
      { p: [{ x: 400, y: 400 }, { x: 600, y: 600 }, { x: 400, y: 800 }, { x: 200, y: 600 }], color: "#a594c0" },
      { p: [{ x: 200, y: 600 }, { x: 400, y: 800 }, { x: 0, y: 800 }], color: "#fa8ecc" },
      { p: [{ x: 800, y: 400 }, { x: 800, y: 800 }, { x: 400, y: 800 }], color: "#f6ca29" }
    ]
    const canvas = document.getElementById('canvas')
    canvas.width = 800
    canvas.height = 800
    const context = canvas.getContext('2d')

    for (let i = 0; i < tangram.length; i++) {
      draw(tangram[i], context)
    }

    function draw(piece, cxt) {
      cxt.beginPath()
      cxt.moveTo(piece.p[0].x, piece.p[0].y)
      for (var i = 1; i < piece.p.length; i++) {
        cxt.lineTo(piece.p[i].x, piece.p[i].y)
      }
      cxt.closePath()

      cxt.fillStyle = piece.color
      cxt.fill()

      cxt.strokeStyle = "black"
      cxt.lineWidth = 3
      cxt.stroke()
    }

圖示:

canvas基礎(chǔ)2 -- 形狀、簡單場景,可視化,css3,css,html

箭頭

    context.beginPath()
    context.moveTo(100, 350) 
    context.lineTo(500, 350) 
    context.lineTo(500, 200) 
    context.lineTo(700, 400)
    context.lineTo(500, 600)
    context.lineTo(500, 450)
    context.lineTo(100, 450)
    context.closePath()
    
    context.lineWidth = 5  
    context.strokeStyle = '#058'

    context.stroke() 

圖示:

canvas基礎(chǔ)2 -- 形狀、簡單場景,可視化,css3,css,html

五角星

如下圖所示:五角星外面的五個頂點都在外圓上,里面的五個頂點都在內(nèi)圓上

五角星的10個頂點,外圓的每個頂點相差72度,同理,內(nèi)圓的每個頂點也相差72度

算出每個頂點的坐標

最后用線段連接起來

canvas基礎(chǔ)2 -- 形狀、簡單場景,可視化,css3,css,html

代碼:

    const canvas = document.getElementById('canvas')
    canvas.width = 800
    canvas.height = 800
    const context = canvas.getContext('2d')    

    const translateX = 400  // 讓圓心在X軸的中心位置
    const bigRadius = 300   // 大圓半徑
    const smallRadius = 150 // 小圓半徑
    context.beginPath()
    for(let i = 0; i < 5; i++) {
      context.lineTo(
        Math.cos((18 + i * 72) / 180 * Math.PI) * bigRadius + translateX,
        -Math.sin((18 + i * 72) / 180 * Math.PI) * bigRadius + translateX
      )
      context.lineTo(
        Math.cos((54 + i * 72) / 180 * Math.PI) * smallRadius + translateX,
        -Math.sin((54 + i * 72) / 180 * Math.PI) * smallRadius + translateX
      )
    }
    context.closePath()

    context.lineWidth = 10
    context.stroke()

圖示:

canvas基礎(chǔ)2 -- 形狀、簡單場景,可視化,css3,css,html

?繪制彎月

canvas基礎(chǔ)2 -- 形狀、簡單場景,可視化,css3,css,html

代碼:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <canvas id="canvas" style="border:1px solid #ccc;display:block;margin:50px auto;"></canvas>

  <script>
    const canvas = document.getElementById('canvas')
    canvas.width = 800
    canvas.height = 800
    const context = canvas.getContext('2d')

    fillMoon(context, 2, 400, 400, 300, 0)

    function fillMoon(cxt, d, x, y, R, rot, fillColor) {
      cxt.save()
      cxt.translate(x, y)
      cxt.rotate(rot * Math.PI / 180)
      cxt.scale(R, R)
      pathMoon(cxt, d)
      cxt.fillStyle = fillColor || '#fb5'
      cxt.fill()
      cxt.restore()
    }

    function pathMoon(cxt, d) {
      cxt.beginPath()
      cxt.arc(0, 0, 1, 0.5*Math.PI, 1.5*Math.PI, true)
      cxt.moveTo(0, -1)
      cxt.arcTo(d, 0, 0, 1, dis(0, -1, d, 0) / d)
      cxt.closePath()
    }

    function dis(x1, y1, x2, y2) {
      return Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))
    }

  </script>
</body>

</html>

圖示:

canvas基礎(chǔ)2 -- 形狀、簡單場景,可視化,css3,css,html

星空

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <canvas id="canvas" style="border:1px solid #ccc;display:block;margin:50px auto;"></canvas>

  <script>
    const canvas = document.getElementById('canvas')
    canvas.width = 1200
    canvas.height = 800
    const context = canvas.getContext('2d')

    const skyStyle = context.createLinearGradient(0, 0, 0, canvas.height)
    skyStyle.addColorStop(0.0, 'black')
    skyStyle.addColorStop(1.0, '#035')
    context.fillStyle = skyStyle
    context.fillRect(0, 0, canvas.width, canvas.height)

    for (let i = 0; i < 200; i++) {
      const R = Math.random() * 5 + 5
      const r = R / 2.0
      const x = Math.random() * canvas.width
      const y = Math.random() * canvas.height * 0.65
      const rot = Math.random() * 360

      drawStar(context, r, R, x, y, rot)
    }

    fillMoon(context, 2, 900, 200, 100, 30)

    drawLand(context)

    function drawLand(cxt) {
      cxt.save()

      cxt.beginPath()
      cxt.moveTo(0, 600)
      cxt.bezierCurveTo(540, 400, 660, 800, 1200, 600)
      cxt.lineTo(1200, 800)
      cxt.lineTo(0, 800)
      cxt.closePath()

      const landStyle = cxt.createLinearGradient(0, 800, 0, 0)
      landStyle.addColorStop(0.0, '#030')
      landStyle.addColorStop(1.0, '#580')
      cxt.fillStyle = landStyle
      cxt.fill()

      cxt.restore()
    }

    function fillMoon(cxt, d, x, y, R, rot, fillColor) {
      cxt.save()
      cxt.translate(x, y)
      cxt.rotate(rot * Math.PI / 180)
      cxt.scale(R, R)
      pathMoon(cxt, d)
      cxt.fillStyle = fillColor || '#fb5'
      cxt.fill()
      cxt.restore()
    }

    function pathMoon(cxt, d) {
      cxt.beginPath()
      cxt.arc(0, 0, 1, 0.5 * Math.PI, 1.5 * Math.PI, true)
      cxt.moveTo(0, -1)
      //cxt.arcTo(d, 0, 0, 1, dis(0, -1, d, 0) / d)
      cxt.quadraticCurveTo(1.2, 0, 0, 1)
      cxt.closePath()
    }

    function dis(x1, y1, x2, y2) {
      return Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
    }

    function drawStar(cxt, r, R, x, y, rot) {
      cxt.save()

      cxt.translate(x, y)
      cxt.rotate(rot / 180 * Math.PI)
      cxt.scale(R, R)

      starPath(cxt)

      cxt.fillStyle = '#fb3'
      // cxt.strokeStyle = '#fd5'
      // cxt.lineWidth = 3
      // cxt.lineJoin = 'round'

      cxt.fill()
      //cxt.stroke()

      cxt.restore()
    }

    function starPath(cxt) {
      cxt.beginPath()
      for (let i = 0; i < 5; i++) {
        cxt.lineTo(
          Math.cos((18 + i * 72) / 180 * Math.PI),
          -Math.sin((18 + i * 72) / 180 * Math.PI)
        )
        cxt.lineTo(
          Math.cos((54 + i * 72) / 180 * Math.PI) * 0.5,
          -Math.sin((54 + i * 72) / 180 * Math.PI) * 0.5
        )
      }
      cxt.closePath()
    }

  </script>
</body>

</html>

圖示:

canvas基礎(chǔ)2 -- 形狀、簡單場景,可視化,css3,css,html

圓角矩形

本質(zhì)上是4條線段和4個弧線,共8個部分組成

canvas基礎(chǔ)2 -- 形狀、簡單場景,可視化,css3,css,html

代碼:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <canvas id="canvas" style="border:1px solid #ccc;display:block;margin:50px auto;"></canvas>

  <script>
    const canvas = document.getElementById('canvas')
    canvas.width = 800
    canvas.height = 800
    const context = canvas.getContext('2d')

    drawRoundRect(context, 100, 100, 600, 400, 20)

    function drawRoundRect(cxt, x, y, width, height, radius) {
      cxt.save()
      cxt.translate(x, y)
      pathRoundRect(cxt, width, height, radius)
      cxt.strokeStyle = 'black'
      cxt.stroke()
      cxt.restore()
    }

    function pathRoundRect(cxt, width, height, radius) {
      cxt.beginPath()
      cxt.arc(width - radius, height - radius, radius, 0, Math.PI / 2)
      cxt.lineTo(radius, height)

      cxt.arc(radius, height - radius, radius, Math.PI / 2, Math.PI)
      cxt.lineTo(0, radius)

      cxt.arc(radius, radius, radius, Math.PI, Math.PI * 3 / 2)
      cxt.lineTo(width - radius, 0)

      cxt.arc(width - radius, radius, radius, Math.PI * 3 / 2, Math.PI * 2)
      cxt.closePath()
    }

  </script>
</body>

</html>

圖示:

canvas基礎(chǔ)2 -- 形狀、簡單場景,可視化,css3,css,html

繪制2048棋盤

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <canvas id="canvas" style="border:1px solid #ccc;display:block;margin:50px auto;"></canvas>

  <script>
    const canvas = document.getElementById('canvas')
    canvas.width = 800
    canvas.height = 800
    const context = canvas.getContext('2d')

    fillRoundRect(context, 150, 150, 500, 500, 10, '#bbada0')
    for(let i = 0; i < 4; i++) {
      for (let j = 0; j < 4; j++) {
        fillRoundRect(context, 170+i*120, 170 + j * 120, 100, 100, 6, '#ccc0b3')
      }
    }

    function fillRoundRect(cxt, x, y, width, height, radius, fillColor) {
      if (2*radius > width || 2*radius > height) {
        return
      }

      cxt.save()
      cxt.translate(x, y)
      pathRoundRect(cxt, width, height, radius)
      cxt.fillStyle = fillColor || 'black'
      cxt.fill()
      cxt.restore()
    }

    function strokeRoundRect(cxt, x, y, width, height, radius, lineWidth, strokeColor) {
      if (2 * radius > width || 2 * radius > height) {
        return
      }

      cxt.save()
      cxt.translate(x, y)
      pathRoundRect(cxt, width, height, radius)
      cxt.lineWidth = lineWidth || 1
      cxt.strokeStyle = strokeColor || 'black'
      cxt.stroke()
      cxt.restore()
    }

    function pathRoundRect(cxt, width, height, radius) {
      cxt.beginPath()
      cxt.arc(width - radius, height - radius, radius, 0, Math.PI / 2)
      cxt.lineTo(radius, height)

      cxt.arc(radius, height - radius, radius, Math.PI / 2, Math.PI)
      cxt.lineTo(0, radius)

      cxt.arc(radius, radius, radius, Math.PI, Math.PI * 3 / 2)
      cxt.lineTo(width - radius, 0)

      cxt.arc(width - radius, radius, radius, Math.PI * 3 / 2, Math.PI * 2)
      cxt.closePath()
    }

  </script>
</body>

</html>

圖示:

canvas基礎(chǔ)2 -- 形狀、簡單場景,可視化,css3,css,html

1文章來源地址http://www.zghlxwxcb.cn/news/detail-726506.html

到了這里,關(guān)于canvas基礎(chǔ)2 -- 形狀、簡單場景的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 可視化系列講解:canvas的動畫實現(xiàn)

    可視化系列講解:canvas的動畫實現(xiàn)

    1.1 Canvas繪圖都是通過JavaScript 去操控的,如要實現(xiàn)一些交互性動畫是相當容易的。那Canvas是如何做一些基本動畫的? ? canvas可能最大的限制就是圖像一旦繪制出來,它就是一直保持那樣了。 ? 如需要執(zhí)行動畫, 不得不對畫布上所有圖形進行一幀一幀的重繪 (比如在1秒繪

    2023年04月08日
    瀏覽(20)
  • 數(shù)據(jù)可視化-canvas-svg-Echarts

    數(shù)據(jù)可視化-canvas-svg-Echarts

    當沒有設(shè)置寬度和高度的時候,canvas 會初始化寬度為 300 像素和高度為 150 像素。切記不能通過樣式去設(shè)置畫布的寬度與高度 寬高必須通過屬性設(shè)置,如果使用樣式設(shè)置,會導致畫布內(nèi)的坐標出現(xiàn)問題 給canvas畫布添加文本內(nèi)容、子節(jié)點沒有任何意義 瀏覽器認為canvas標簽是一

    2024年02月12日
    瀏覽(22)
  • Python網(wǎng)絡(luò)爬蟲爬取招聘數(shù)據(jù)(利用python簡單零基礎(chǔ))可做可視化

    Python網(wǎng)絡(luò)爬蟲爬取招聘數(shù)據(jù)(利用python簡單零基礎(chǔ))可做可視化

    身為一個求職者,或者說是對于未來的職業(yè)規(guī)劃還沒明確目標的大學生來說,獲取各大招聘網(wǎng)上的數(shù)據(jù)對我們自身的發(fā)展具有的幫助作用,本文章就簡答零基礎(chǔ)的來介紹一下如何爬取招聘數(shù)據(jù)。 我們以東莞的Python數(shù)據(jù)分析師這個職位來做一個簡單的分析,頁面如下圖所示:

    2024年02月03日
    瀏覽(27)
  • HTML5+CSS3+JS小實例:音頻可視化

    HTML5+CSS3+JS小實例:音頻可視化

    實例:音頻可視化 技術(shù)棧:HTML+CSS+JS 效果: 源碼: 【HTML】 【CSS】

    2024年01月18日
    瀏覽(17)
  • 可視化看板有那么多應用場景,該如何快速搭建?可視化工具該如何選擇?

    可視化看板有那么多應用場景,該如何快速搭建?可視化工具該如何選擇?

    在當今的信息化時代,數(shù)據(jù)已經(jīng)成為了現(xiàn)代決策的核心。無論是企業(yè)戰(zhàn)略規(guī)劃、運營管理,還是個人生活決策,數(shù)據(jù)都扮演著至關(guān)重要的角色。隨著數(shù)據(jù)分析技術(shù)和工具的不斷進步,數(shù)據(jù)在決策中的作用將變得更加突出,對組織和個人的成功至關(guān)重要。 可視化看板是一種將復

    2024年04月23日
    瀏覽(98)
  • Unity制作數(shù)據(jù)可視化三維場景

    數(shù)據(jù)可視化大屏是這幾年比較熱門的一個方向,人們對數(shù)據(jù)的感知方式,也慢慢要求更嚴苛了。 Bi報表到數(shù)據(jù)可視化大屏,再到三維可視化大屏,這個發(fā)展趨勢也體現(xiàn)了人們在使用數(shù)據(jù)可視化大屏時對效果的要求逐漸提高。 2維圖表在過去幾年的使用中,不斷完善,已經(jīng)有了

    2023年04月10日
    瀏覽(23)
  • 數(shù)據(jù)可視化在行業(yè)解決方案中的實踐應用 ——華為云Astro Canvas大屏開發(fā)研究及指南

    數(shù)據(jù)可視化在行業(yè)解決方案中的實踐應用 ——華為云Astro Canvas大屏開發(fā)研究及指南

    本文主要探討華為云Astro Canvas在數(shù)據(jù)可視化大屏開發(fā)中的應用及效果。首先闡述Astro Canvas的基本概念、功能和特性說明,接著集中分析展示其在教育、金融、交通行業(yè)等不同領(lǐng)域?qū)嶋H應用案例;之后,詳細介紹使用該工具進行大屏圖表創(chuàng)建的開發(fā)指南和最佳實踐策略,包括模

    2024年02月08日
    瀏覽(17)
  • 山海鯨可視化軟件:多場景下的數(shù)據(jù)呈現(xiàn)利器

    山海鯨可視化軟件:多場景下的數(shù)據(jù)呈現(xiàn)利器

    在當今數(shù)據(jù)驅(qū)動的時代,數(shù)據(jù)可視化成為了企業(yè)和個人不可或缺的工具。作為一個老數(shù)據(jù)人,本文想借用自己常用 山海鯨可視化軟件 ,帶大家了解在不同使用場景下數(shù)據(jù)可視化的應用。山海鯨可視化是一款可以 免費 編輯、本地化部署的產(chǎn)品,對數(shù)據(jù)可視化新人來說十分友好

    2024年02月21日
    瀏覽(23)
  • 利用大數(shù)據(jù)分析工具,實現(xiàn)多場景可視化數(shù)據(jù)管理

    利用大數(shù)據(jù)分析工具,實現(xiàn)多場景可視化數(shù)據(jù)管理

    https://yanhuang.yuque.com/staff-sbytbc/rb5rur? 購買服務(wù)器 購買騰訊云服務(wù)器,1300 元新人價,一年時間 ●4核16G內(nèi)存 ●CentOS 6.7 (補充說明:最新的 2.7.1 GA 版本,8G 內(nèi)存也是可以跑的,可以先使用8G,不夠再做升級)。 安裝docker環(huán)境 安裝docker,速度還挺快的,大概3~5分鐘內(nèi) 1、注冊鴻

    2024年02月14日
    瀏覽(23)
  • 真的!不用代碼就能實現(xiàn)復雜的場景可視化大屏交互功能!

    真的!不用代碼就能實現(xiàn)復雜的場景可視化大屏交互功能!

    在很多可視化項目中,如果想要實現(xiàn)場景可視化大屏交互的功能,程序員們總是需要敲很多代碼,才能最終產(chǎn)出有效的交互效果,在這之中,如果出現(xiàn)個bug,那在一大串代碼中尋找這個bug 的出處,又必然是一件讓人頭疼的事情。難道就沒有一種不用敲代碼就能實現(xiàn)場景可視化

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包