目次
2。基本的なベクトル操作
ベクトルの追加と減算
スカラー乗算と分割
3。大きさと正規化
マグニチュード(長さ)
正規化
4。ドット製品
5。クロス製品(3Dのみ)
6。2つのポイント間の距離
7。線形補間(LERP)
8。PHPの実践的なユースケース
ボーナス:2D対3D
最終メモ
ホームページ バックエンド開発 PHPチュートリアル PHPの2D/3Dグラフィックスのベクター数学の基礎

PHPの2D/3Dグラフィックスのベクター数学の基礎

Jul 29, 2025 am 04:25 AM
PHP Math

PHPグラフィックスのベクトルは、x、y、z成分を持つVector3dなどのクラスを使用して、位置、方向、または速度を表します。 2。基本操作には、追加、減算、スカラー乗算、および動きとスケーリングの分割が含まれます。 3。マグニチュードはピタゴラスの定理を介して計算され、正規化はベクトルを一貫した方向のためにユニットベクトルに変換します。 4. DOT製品は、照明と角度の計算に役立つベクトル間のアライメントを決定します。 5. 3Dのクロス製品は、正規と回転に不可欠な垂直ベクターを生成します。 6。ポイント間の距離は、その差の大きさから派生します。 7.線形補間(LERP)は、アニメーションのベクトル間のスムーズな遷移を可能にします。 8.実際のPHPユースケースには、ゲームロジックシミュレーション、SVG生成、およびパスファインディングが含まれます。ここでは、PHPの非現実的な時間にもかかわらず、ベクター数学が正確な空間推論を保証します。

PHPの2D/3Dグラフィックスのベクター数学の基礎

PHPで2Dまたは3Dグラフィックスを操作する場合、特にゲーム開発、画像操作、手続き型アニメーションなどのコンテキストでは、位置、方向、変換を処理する必要があることがよくあります。 PHPは伝統的に高性能グラフィックスに使用されていませんが、ベクター数学を理解することは、カスタムエンジンやバックエンドシミュレーションの動き、衝突検出、カメラシステムなどのロジックを実装するために不可欠です。

PHPの2D/3Dグラフィックスのベクター数学の基礎

2D/3Dグラフィックスに合わせて、PHPで実装する方法を調整した、必要なベクター数学の基礎の実際的な内訳です。


1。ベクターとは何ですか?

グラフィックプログラミングでは、ベクトルは、大きさ(長さ)方向の両方を持つ数学的オブジェクトです。一般的には次のことを表すために使用されます。

PHPの2D/3Dグラフィックスのベクター数学の基礎
  • 位置(例: (x, y)または(x, y, z)
  • 速度(何かが動く方向に速く、どの方向にあるか)
  • 加速度
  • 方向(例、光の方向、表面正規)

PHPでは、単純なクラスを使用して2Dまたは3Dベクトルを表すことができます。

クラスvector3d {
    public $ x、$ y、$ z;

    パブリック関数__construct($ x = 0、$ y = 0、$ z = 0){
        $ this-> x = $ x;
        $ this-> y = $ y;
        $ this-> z = $ z;
    }

    // 2dの場合、$ z = 0を使用して無視してください
}

2。基本的なベクトル操作

これらは、ベクター数学の構成要素です。

PHPの2D/3Dグラフィックスのベクター数学の基礎

ベクトルの追加と減算

  • 追加:2つのベクトルを組み合わせます(たとえば、速度で移動します)。
  • 減算:あるポイントから別のポイントへの方向を取得します。
パブリック関数add(vector3d $ v):vector3d {
    new vector3d($ this-> x $ v-> x、$ this-> y $ v-> y、$ this-> z $ v-> z);
}

パブリック関数減算(vector3d $ v):vector3d {
    new vector3d($ this-> x-$ v-> x、$ this-> y-$ v-> y、$ this-> z-$ v-> z);
}

例:

 $ position = new Vector3d(1、2、0);
$ velocity = new Vector3d(0.5、-0.3、0);
$ newposition = $ position-> add($ velocity); //(1.5、1.7、0)

スカラー乗算と分割

ベクトルのスケーリングに使用されます(たとえば、動きを遅くします)。

パブリック関数乗算(float $ scalar):vector3d {
    new vector3d($ this-> x * $ scalar、$ this-> y * $ scalar、$ this-> z * $ scalar);
}

パブリック関数の除算(float $ scalar):vector3d {
    if($ scalar == 0)新しいInvalidargumentException( "ゼロで除算できない");
    new vector3d($ this-> x / $ scalar、$ this-> y / $ scalar、$ this-> z / $ scalar);
}

3。大きさと正規化

マグニチュード(長さ)

ベクターの長さは、ピタゴラスの定理を使用して計算されます。

3Dの場合:

 | v | =√(x²y²z²)
パブリック関数の大きさ():float {
    return sqrt($ this-> x ** 2 $ this-> y ** 2 $ this-> z ** 2);
}

正規化

ベクトルの長さは1(ユニットベクトル)の長さで、方向に役立ちます。

 public function remormize():vector3d {
    $ mag = $ this-> magnitude();
    if($ mag == 0)新しいvector3d(0、0、0)を返します。
    return $ this-> divide($ mag);
}

例:

 $ direction = new Vector3d(3、4、0);
$ unit = $ direction-> remormize(); //(0.6、0.8、0) - 長さは1です

4。ドット製品

DOT製品は、 2つのベクトルがどれだけ揃っているかを示します。スカラー値です。

式:

 a・b = ax*bx ay*by az*bz

また:

 a・b = | a || b | cos(θ)

役に立つ:

  • 2つの方向が同じように向いているかどうかを確認します
  • バックフェイスのculling
  • 照明計算(光と表面間の角度)
パブリック関数ドット(vector3d $ v):float {
    return $ this-> x * $ v-> x $ this-> y * $ v-> y $ this-> z * $ v-> z;
}

例:

 $ forward = new vector3d(1、0、0);
$ other = new Vector3d(0.7、0.7、0);
$ angLecos = $ forward-> dot($ other); // 0.7→約45度

5。クロス製品(3Dのみ)

2つの入力ベクトルに垂直ベクトルを返します。重要:

  • 表面正常を見つける
  • トルクまたは回転軸の計算

式(簡素化):

 a×b =(ay*bz -az*by、az*bx -ax*bz、ax*by -ay*bx)
パブリック関数Cross(vector3d $ v):vector3d {
    新しいvector3dを返します(
        $ this-> y * $ v-> z-$ this-> z * $ v-> y、
        $ this-> z * $ v-> x-$ this-> x * $ v-> z、
        $ this-> x * $ v-> y-$ this-> y * $ v-> x
    );
}

注:クロス製品は在宅式です: a × b = -(b × a)


6。2つのポイント間の距離

位置をベクトルとして扱います。距離は差の大きさです。

 public static関数距離(vector3d $ a、vector3d $ b):float {
    $ a-> subtract($ b) - > magnitude()を返します。
}

7。線形補間(LERP)

2つのベクトル間のスムーズに遷移します。アニメーション、カメラの動きで使用されます。

パブリック関数LERP(vector3d $ターゲット、フロート$ t):vector3d {
    // $ tは0(開始)と1(終了)です
    $ t = max(0、min(1、$ t));
    新しいvector3dを返します(
        $ this-> x($ target-> x-$ this-> x) * $ t、
        $ this-> y($ target-> y-$ this-> y) * $ t、
        $ this-> z($ target-> z-$ this-> z) * $ t
    );
}

8。PHPの実践的なユースケース

PHPがグラフィックを直接レンダリングしていなくても、次のようになります。

  • サーバー上のオブジェクトの動きをシミュレートします
  • ゲームロジックを検証します
  • SVGまたはキャンバス座標を生成します
  • プリピュートパスまたは衝突ゾーン

例:オブジェクトをターゲットに向けて移動します

$ position = new Vector3d(0、0、0);
$ターゲット= new Vector3d(10、5、0);
$ direction = $ターゲット - >減算($ position) - > remormize();
$速度= 0.2;
$ position = $ position-> add($ direction-> multiply($ speed));

ボーナス:2D対3D

  • 2Dの場合、 $z = 0を設定して無視してください。
  • 最適化する場合はVector2Dクラスを使用します(操作が少ない)。
  • クロス製品は2Dには存在しませんが、垂直ベクトルを計算できます: (-y, x)または(y, -x)

最終メモ

  • PHPはリアルタイムグラフィックス用に最適化されていませんが、ベクター数学は実装が簡単で、バックエンドロジックに役立ちます。
  • 頻繁に使用される場合は、キャッシュの大きさを検討してください(平方マグニチュードの比較はsqrtを避けます)。
  • 正規化する前に、常にゼロベクトルを確認してください。

基本的に、ベクトルの添加、減算、DOT製品、および正規化を行うと、PHPでも2D/3D環境で必要なほとんどの動きと空間ロジックを構築できます。スピードに関するものではありません。それは正確さと明快さについてです。

以上がPHPの2D/3Dグラフィックスのベクター数学の基礎の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPの浮動小数点の不正確さの落とし穴をナビゲートします PHPの浮動小数点の不正確さの落とし穴をナビゲートします Jul 29, 2025 am 05:01 AM

浮動小数点数は不正確です。PHPの一般的な問題です。答えは、IEEE754ダブルエシジョン形式を使用していることです。これにより、小数を正確に表現できなくなります。 1.0.1や0.2などの数値は、バイナリの無限ループ10進数であり、コンピューターはエラーを引き起こすために切り捨てられる必要があります。 2。浮動小数点数を比較する場合、abs($ a- $ b)など、==の代わりに許容範囲を使用する必要があります。

暗号通貨の計算の取り扱い:PHPにBCMATHが不可欠である理由 暗号通貨の計算の取り扱い:PHPにBCMATHが不可欠である理由 Aug 01, 2025 am 07:48 AM

bcmathisentialforAccuratecurateptocurrencycalcatulationsinphpbecuseating-pointarithmeticincecceptesuncectesubleroundingErrors.1..2 Yieldimimpreciseresults(e.g.、0.300000000000000000000000000precyptowsyptowyprectoyptoyprecyptoyprecyptoyppowsyptowprecyptowprecyptowprecyptowprecyptowprecyptowprecyptowprecyptowpreciseResults)

数値精度のニュアンス: `round()`、 `ceil()`、および `floor()`落とし穴 数値精度のニュアンス: `round()`、 `ceil()`、および `floor()`落とし穴 Jul 29, 2025 am 04:55 AM

round()は、「roundhalftoeven」を「roundhalfup」ではなく使用します

暗号化アプリケーションのPHPにおけるモジュラー算術の役割 暗号化アプリケーションのPHPにおけるモジュラー算術の役割 Jul 30, 2025 am 12:17 AM

モジュラーリットメティジーインシンスインフェッジグラプグラフィックアプリケーションデスペフプノットパフォーマンス - パフォーマンス

PHPの2D/3Dグラフィックスのベクター数学の基礎 PHPの2D/3Dグラフィックスのベクター数学の基礎 Jul 29, 2025 am 04:25 AM

AvectorInphpGraphicsSposition、direction、orvelocityusinglasslikevector3dwithx、y、zcomponents.2.basicoperationsincludeaddition、減算、筋肉拡張、および拡張性フォームメントアンドスケーリング

統計分析ツールキットの構築:PHPの平均、中央値、標準偏差 統計分析ツールキットの構築:PHPの平均、中央値、標準偏差 Jul 30, 2025 am 05:17 AM

平均を計算します:array_sum()を使用して要素の数で除算して平均を取得します。 2。中央値を計算します:並べ替え後、中間値を取得し、要素さえあるときに2つの中間数の平均を取得します。 3。標準偏差を計算します。最初に平均を見つけてから、各値と平均の平方差の平均(サンプルはn-1)を計算し、最後に平方根を取得します。これらの3つの機能をカプセル化することにより、基本的な統計ツールを構築し、中小規模のデータの分析に適しており、空の配列と非数値入力の処理に注意を払い、外部ライブラリに依存することなくデータのコア統計的特徴を実現できます。

多数の算術を加速:PHPのGMP拡張に深く潜る 多数の算術を加速:PHPのGMP拡張に深く潜る Jul 29, 2025 am 04:53 AM

gmpisessentyfor forhandlinglargeintegersinphpbeyondnativelimits.1.gmpenablessablessablessisistraryinteintegerarithticusing inting intingistimized clibraries、unterinative integertertegersthationtegertegerstegertegerstegerstegerstegersはbasedring.2.usgmpforheyintegeroperiationsを使用してください

計算能力のロック解除:PHPのGMPを使用した要因とフィボナッチ 計算能力のロック解除:PHPのGMPを使用した要因とフィボナッチ Jul 29, 2025 am 04:37 AM

gmpisessentialfor forhandlinglargenumbersinphpthatex ceehrystandintegerlimits、sudasinfactorialandfibonaccicalculations

See all articles