検索
ホームページウェブフロントエンドhtmlチュートリアルCanvas は高次ベジェ曲線を実装します

この記事では主にcanvasでの高次ベジェ曲線(N次ベジェ曲線ジェネレーター)の実装を紹介しますが、とても良いと思ったので参考にさせていただきます。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。

最初に書いてください

ネイティブ Canvas は 3 次のベジェ曲線までしかサポートしていないため、複数のコントロール ポイントを追加したい場合はどうすればよいですか? (3次ベジェであれば、最も複雑な曲線もシミュレートできます。)同時に、ベジェ制御点の位置については、どの程度制御点を設定すれば希望する曲線を形成するのかを直感的に知ることは困難です。 。上記の 2 つの問題点を解決するための N レベルのソリューション (js バージョン) がコミュニティにないようです。そこで、今回は著者がオープンソースの bezierMaker.js について真剣に考えています。

bezierMaker.js は理論的には N 次ベジェ曲線の生成をサポートしており、開発者がコントロール ポイントを追加およびドラッグして最終的に描画アニメーションのセットを生成するためのテスト環境も提供します。開発者にとって、さまざまな位置の制御点に対応するさまざまな生成曲線を知ることは非常に直感的です。

この作品が気に入ったら、スターへようこそ。結局のところ、スターは苦労して獲得するものです。 。

プロジェクトアドレス: こちら✨✨✨

なぜテストサイトが必要なのでしょうか?

複雑な高次ベジェ曲線を描画する場合、必要な曲線の制御点の正確な位置を知ることはできません。テストフィールドでシミュレーションすることで、リアルタイムに制御点の座標値を取得でき、取得した点座標をオブジェクト配列に変換してBezierMakerクラスに渡してターゲット曲線を生成できます

。 [x] テストフィールドには任意の数のコントロールポイントを追加できます

[x] テストフィールドは曲線描画アニメーションの表示をサポートしています

[x] コントロールポイントは自由にドラッグできます

  1. [ x ] ベジェ曲線形成過程の接線表示をサポート

  2. [x] 3次以下のベジェ曲線の描画はネイティブAPIを採用

  3. 導入

  4. <script src="./bezierMaker.js"></script>
  5. drawing

  6. 上のレンダリングは、テスト サイトの使用法を示しています。テスト サイトを通じてコン​​トロール ポイントの正確な座標を取得した後、bezierMaker.js を呼び出して曲線を直接描画できます。

/**
 * canvas canvas的dom对象
 * bezierCtrlNodesArr 控制点数组,包含x,y坐标
 * color 曲线颜色
 */
var canvas = document.getElementById(&#39;canvas&#39;)
//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, &#39;black&#39;)
var bezier1 = new BezierMaker(canvas, arr1, &#39;red&#39;)
var bezier2 = new BezierMaker(canvas, arr2, &#39;blue&#39;)
var bezier3 = new BezierMaker(canvas, arr3, &#39;yellow&#39;)
var bezier4 = new BezierMaker(canvas, arr4, &#39;green&#39;)
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
    }
}

すべての点をトラバースし、現在の比率 t (0
ベッセル公式の導出については、後の記事で具体的に説明します。ここでは、ベッセル公式を使用して、実際のベジェ曲線が 1000 個の点に分割され、各点が直線で結ばれることを理解するだけで済みます。点では、クラス曲線をシミュレートできます。

シミュレーションフィールドのベジェ曲線生成アニメーションの実装については
関連コードのこの部分はここで参照できます

全体的なアイデアは、再帰的手法を使用して制御点の各層を一次ベッセル関数として扱うことです次のレイヤ コントロール ポイントと対応する接続​​を計算します。著者は、テストサイトのアニメーション生成原理を整理するために、ベジェ曲線の公式原理の詳細な説明まで具体的なロジックを残しておきます~

関連する推奨事項:

CSSを使用してベジェ曲線を作成する

ベジェ曲線アプリケーションの詳細な説明

キャンバスベジェ曲線効果を実装するためのコードデモ

以上がCanvas は高次ベジェ曲線を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
属性を持つHTMLタグの例を挙げてください。属性を持つHTMLタグの例を挙げてください。May 16, 2025 am 12:02 AM

HTMLタグと属性の使用方法には次のものが含まれます。1。基本的な使用法:などのタグを使用し、SRCやHREFなどの属性を介して必要な情報を追加します。 2。高度な使用法:データ - *カスタム属性を使用して、複雑な相互作用を実現します。 3.一般的な間違いを避けてください:プロパティ値が見積もりに囲まれていることを確認してください。 4。パフォーマンスの最適化:シンプルに保ち、標準属性とCSSクラス名を使用して、画像にALT属性があることを確認します。これらをマスターすると、Web開発スキルが向上します。

HTMLタグとHTML属性の違いは何ですか?HTMLタグとHTML属性の違いは何ですか?May 14, 2025 am 12:01 AM

htmltagsdeTheStructureOfawebpage、whiLeattributesdddddddddtetails.1)tagslike、andoutlineThecontentのsplacement.2)属性、クラス、およびスチリーンハンシテアグビーズイメージソース、スタイリング、および改善、および改善の想像力。

HTMLの未来:進化とトレンドHTMLの未来:進化とトレンドMay 13, 2025 am 12:01 AM

HTMLの未来は、よりセマンティック、機能的、モジュール式方向に発展します。 1)セマンティック化により、タグがコンテンツをより明確に説明し、SEOとバリアのないアクセスを改善します。 2)機能化は、ユーザーのニーズを満たすために新しい要素と属性を導入します。 3)モジュール性は、コンポーネントの開発をサポートし、コードの再利用性を改善します。

Web開発にとってHTML属性が重要なのはなぜですか?Web開発にとってHTML属性が重要なのはなぜですか?May 12, 2025 am 12:01 AM

htmlattributesarecrucialinwebdevevermentmentmentmentmentmentmentmention behavior、like、andfunctionality.theyenhance -interactivity、accessibility、andseo.forexample、thesrcattribute intagsimpactsseo

Alt属性の目的は何ですか?なぜそれが重要なのですか?Alt属性の目的は何ですか?なぜそれが重要なのですか?May 11, 2025 am 12:01 AM

ALT属性は、HTMLのタグの重要な部分であり、画像の代替テキストを提供するために使用されます。 1.画像をロードできない場合、ALT属性のテキストが表示され、ユーザーエクスペリエンスが向上します。 2。スクリーンリーダーは、ALT属性を使用して、視覚障害のあるユーザーが写真の内容を理解するのに役立ちます。 3. ALT属性のEnginesインデックステキストを検索して、WebページのSEOランキングを改善します。

HTML、CSS、およびJavaScript:例と実用的なアプリケーションHTML、CSS、およびJavaScript:例と実用的なアプリケーションMay 09, 2025 am 12:01 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造の構築に使用されます。 2。CSSは、Webページの外観を美化するために使用されます。 3. JavaScriptは、動的な相互作用を実現するために使用されます。タグ、スタイル、スクリプトを通じて、これら3つは最新のWebページのコア関数を構築します。

Lang属性をタグにどのように設定しますか?なぜこれが重要なのですか?Lang属性をタグにどのように設定しますか?なぜこれが重要なのですか?May 08, 2025 am 12:03 AM

タグのLang属性を設定することは、WebアクセシビリティとSEOを最適化する重要なステップです。 1)ラング属性をタグに設定します。 2)多言語コンテンツでは、ようなさまざまな言語パーツのLang属性を設定します。 3)「EN」、「FR」、「ZH」などのISO639-1標準に準拠する言語コードを使用します。Lang属性を正しく設定すると、Webページと検索エンジンランキングのアクセシビリティが向上します。

HTML属性の目的は何ですか?HTML属性の目的は何ですか?May 07, 2025 am 12:01 AM

htmlattributeSareSientionalentionalentionalentionalentiallyance'functionalityandappearance.theyaddinformationtodefinebehavior、light、and interaction、makewebsitesteractive、responsive、andviseallyappaleal.attributeslikesrc、href、class、型、およびdoadabledransform

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。