Canvas は高次ベジェ曲線を実装します
この記事では主にcanvasでの高次ベジェ曲線(N次ベジェ曲線ジェネレーター)の実装を紹介しますが、とても良いと思ったので参考にさせていただきます。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。
最初に書いてください
ネイティブ Canvas は 3 次のベジェ曲線までしかサポートしていないため、複数のコントロール ポイントを追加したい場合はどうすればよいですか? (3次ベジェであれば、最も複雑な曲線もシミュレートできます。)同時に、ベジェ制御点の位置については、どの程度制御点を設定すれば希望する曲線を形成するのかを直感的に知ることは困難です。 。上記の 2 つの問題点を解決するための N レベルのソリューション (js バージョン) がコミュニティにないようです。そこで、今回は著者がオープンソースの bezierMaker.js について真剣に考えています。
bezierMaker.js は理論的には N 次ベジェ曲線の生成をサポートしており、開発者がコントロール ポイントを追加およびドラッグして最終的に描画アニメーションのセットを生成するためのテスト環境も提供します。開発者にとって、さまざまな位置の制御点に対応するさまざまな生成曲線を知ることは非常に直感的です。
この作品が気に入ったら、スターへようこそ。結局のところ、スターは苦労して獲得するものです。 。
プロジェクトアドレス: こちら✨✨✨
なぜテストサイトが必要なのでしょうか?
複雑な高次ベジェ曲線を描画する場合、必要な曲線の制御点の正確な位置を知ることはできません。テストフィールドでシミュレーションすることで、リアルタイムに制御点の座標値を取得でき、取得した点座標をオブジェクト配列に変換してBezierMakerクラスに渡してターゲット曲線を生成できます
。 [x] テストフィールドには任意の数のコントロールポイントを追加できます
[x] テストフィールドは曲線描画アニメーションの表示をサポートしています
[x] コントロールポイントは自由にドラッグできます
- [ x ] ベジェ曲線形成過程の接線表示をサポート
- [x] 3次以下のベジェ曲線の描画はネイティブAPIを採用
導入
-
<script src="./bezierMaker.js"></script>
ログイン後にコピー - drawing
/** * canvas canvas的dom对象 * bezierCtrlNodesArr 控制点数组,包含x,y坐标 * color 曲线颜色 */ var canvas = document.getElementById('canvas') //3阶之前采用原生方法实现 var arr0 = [{x:70,y:25},{x:24,y:51}] var arr1 = [{x:233,y:225},{x:170,y:279},{x:240,y:51}] var arr2 = [{x:23,y:225},{x:70,y:79},{x:40,y:51},{x:300, y:44}] var arr3 = [{x:333,y:15},{x:70,y:79},{x:40,y:551},{x:170,y:279},{x:17,y:239}] var arr4 = [{x:53,y:85},{x:170,y:279},{x:240,y:551},{x:70,y:79},{x:40,y:551},{x:170,y:279}] var bezier0 = new BezierMaker(canvas, arr0, 'black') var bezier1 = new BezierMaker(canvas, arr1, 'red') var bezier2 = new BezierMaker(canvas, arr2, 'blue') var bezier3 = new BezierMaker(canvas, arr3, 'yellow') var bezier4 = new BezierMaker(canvas, arr4, 'green') bezier0.drawBezier() bezier1.drawBezier() bezier2.drawBezier() bezier3.drawBezier() bezier4.drawBezier()
制御点が 3 つ未満の場合は、ネイティブ API インターフェイスが適応されます。制御点が 3 つ以上ある場合、実装した関数を使用して点を描画します。
基本原則
ベジェ曲線の描画
ベジェ曲線の描画の中核は、ベジェ公式の適用にあります:
この公式のP0-Pnは、始点からさまざまな曲線までの距離を表します。各制御点から終点の各点までのべき乗演算と比率t。
BezierMaker.prototype.bezier = function(t) { //贝塞尔公式调用 var x = 0, y = 0, bezierCtrlNodesArr = this.bezierCtrlNodesArr, //控制点数组 n = bezierCtrlNodesArr.length - 1, self = this bezierCtrlNodesArr.forEach(function(item, index) { if(!index) { x += item.x * Math.pow(( 1 - t ), n - index) * Math.pow(t, index) y += item.y * Math.pow(( 1 - t ), n - index) * Math.pow(t, index) } else { //factorial为阶乘函数 x += self.factorial(n) / self.factorial(index) / self.factorial(n - index) * item.x * Math.pow(( 1 - t ), n - index) * Math.pow(t, index) y += self.factorial(n) / self.factorial(index) / self.factorial(n - index) * item.y * Math.pow(( 1 - t ), n - index) * Math.pow(t, index) } }) return { x: x, y: y } }
ベッセル公式の導出については、後の記事で具体的に説明します。ここでは、ベッセル公式を使用して、実際のベジェ曲線が 1000 個の点に分割され、各点が直線で結ばれることを理解するだけで済みます。点では、クラス曲線をシミュレートできます。
シミュレーションフィールドのベジェ曲線生成アニメーションの実装については
関連コードのこの部分はここで参照できます
全体的なアイデアは、再帰的手法を使用して制御点の各層を一次ベッセル関数として扱うことです次のレイヤ コントロール ポイントと対応する接続を計算します。著者は、テストサイトのアニメーション生成原理を整理するために、ベジェ曲線の公式原理の詳細な説明まで具体的なロジックを残しておきます~
関連する推奨事項:
CSSを使用してベジェ曲線を作成する
ベジェ曲線アプリケーションの詳細な説明
キャンバスベジェ曲線効果を実装するためのコードデモ
以上がCanvas は高次ベジェ曲線を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Canvas を使用している学校には、スタンフォード大学、MIT、コロンビア大学、カリフォルニア大学バークレー校などが含まれます。詳細な紹介: 1. スタンフォード大学は、主要なオンライン学習プラットフォームとして Canvas を使用しています。スタンフォード大学の教師と学生は、Canvas を使用してコースの内容を管理および伝達し、オンライン ディスカッション、課題の提出、試験などの機能を通じて学習します。2. マ州Polytechnic Institute と MIT もオンライン学習管理システムとして Canvas を使用しており、Canvas プラットフォームを通じてコース管理を行っています。3. コロンビア大学など。

キャンバス矢印プラグインには、1. シンプルで使いやすい API を備え、カスタムの矢印効果を作成できる Fabric.js、2. 矢印を描画する機能を提供し、さまざまな矢印を作成できる Konva.js が含まれます。スタイル; 3. 豊富なグラフィックス処理機能を提供し、さまざまな矢印効果を実現できる Pixi.js; 4. 矢印のスタイルやアニメーションを簡単に作成および制御できる Two.js; 5. さまざまな矢印効果を作成できる Arrow.js ; 6. 大まかな.jsでは、手描きの矢印などが作成できます。

キャンバス時計の詳細には、時計の外観、目盛り、デジタル時計、時針、分針、秒針、中心点、アニメーション効果、その他のスタイルなどが含まれます。詳細な紹介: 1. 時計の外観、キャンバスを使用して時計の外観として円形の文字盤を描画し、文字盤のサイズ、色、境界線などのスタイルを設定できます; 2. 目盛り線、目盛り線を描画します。位置; 3. デジタル時計、現在の時と分を示すために文字盤にデジタル時計を描くことができます; 4. 時針、分針、秒針など。

html2canvas のバージョンには、html2canvas v0.x、html2canvas v1.x などが含まれます。詳細な紹介: 1. html2canvas v0.x (html2canvas の初期バージョン) 最新の安定バージョンは v0.5.0-alpha1 です。これは、多くのプロジェクトで広く使用され、検証されている成熟したバージョンです。2. html2canvas v1.x、これは html2canvas の新しいバージョンです。

Canvas フレームワークを探索する: 一般的に使用される Canvas フレームワークを理解するには、特定のコード例が必要です。 はじめに: Canvas は HTML5 で提供される描画 API であり、これを通じて豊富なグラフィックスやアニメーション効果を実現できます。描画の効率と利便性を向上させるために、多くの開発者がさまざまな Canvas フレームワークを開発しました。この記事では、一般的に使用される Canvas フレームワークをいくつか紹介し、読者がこれらのフレームワークの使用方法をより深く理解できるように、具体的なコード例を示します。 1.EaselJSフレームワークEa

キャンバスを使用して uniapp でチャートやアニメーション効果を描画する方法には、特定のコード例が必要です。 1. はじめに モバイル デバイスの普及に伴い、モバイル端末上でさまざまなチャートやアニメーション効果を表示する必要があるアプリケーションがますます増えています。 uniapp は、Vue.js に基づくクロスプラットフォーム開発フレームワークとして、キャンバスを使用してチャートやアニメーション効果を描画する機能を提供します。この記事では、uniapp がキャンバスを使用してチャートやアニメーション効果を実現する方法を紹介し、具体的なコード例を示します。 2.キャンバス

tkinter Canvas 属性には、bg、bd、relief、width、height、cursor、highlightbackground、highlightcolor、highlightthickness、insertbackground、insertwidth、selectbackground、selectforeground、xscrollcommand 属性などが含まれます。詳しい紹介

ゲーム開発におけるキャンバスの力と応用を理解する 概要: インターネット技術の急速な発展に伴い、Web ゲームはプレイヤーの間でますます人気が高まっています。 Web ゲーム開発の重要な部分として、キャンバス テクノロジーがゲーム開発に徐々に登場し、その強力なパワーと応用性を示しています。この記事では、ゲーム開発におけるキャンバスの可能性を紹介し、具体的なコード例を通じてその応用例を示します。 1. Canvas テクノロジの概要 Canvas は HTML5 の新しい要素で、これにより次のことが可能になります。
