Grasshopperを使っていると、「ベクトルのどの方向成分が一番大きいんだろう?」と悩むことがありますよね。例えば、複雑なカーブのセグメントの中から、X方向またはY方向のどちらがより支配的かを知りたい、といったケースです。今回は、ベクトルの最大成分を特定し、その方向ベクトルを取得するロジックを具体的にご紹介します。

ベクトルの成分分解と絶対値化

まず、対象となるベクトルをそれぞれの成分に分解することから始めましょう。これには「Deconstruct Vector」コンポーネントが非常に便利です。このコンポーネントにベクトルを入力すると、そのX、Y、Z成分が個別の数値として出力されます。

次に重要なのが、成分の「大きさ」を正しく比較することです。ベクトルは正の方向だけでなく負の方向も持ちます。例えば、X成分が5と-10の場合、絶対値としては-10の方が大きいですよね。このため、各成分を「Abs」(Absolute)コンポーネントに通して絶対値に変換します。これにより、方向に関わらず純粋な大きさで比較できるようになります。

最大成分の特定ロジック

絶対値に変換されたX、Y、Z成分の中から、最大の数値を見つけ出す必要があります。これにはいくつか方法がありますが、シンプルに「Max」コンポーネントを使うのが手軽です。複数の数値を入力すると、その中で最も大きい値を出力してくれます。または、「Sort List」コンポーネントでソートし、「List Item」で最後の要素を取り出す方法もあります。

最大値が特定できたら、それがどの成分に対応するのかを判断します。例えば、最大値がX成分の絶対値と等しければ、X方向が支配的だと判断できます。Y成分、Z成分についても同様に比較します。

最大成分方向のベクトル抽出

最大成分が特定できたら、その方向に対応する単位ベクトルを抽出します。これには「Conditional (If)」コンポーネントと、各軸の単位ベクトルを生成する「Unit X」「Unit Y」「Unit Z」コンポーネントを組み合わせます。

具体的なフローとしては、まず「Equality」コンポーネントを使って、最大値がX成分の絶対値と等しいか、Y成分の絶対値と等しいか、といった比較を行います。この比較結果(True/False)を「If」コンポーネントのCondition入力に接続します。

例えば、X成分が最大だった場合、「If」コンポーネントのTrue出力には「Unit X」を、False出力には次の条件判定(Y成分が最大か?)の結果をネストしていくことで、最終的に正しい方向ベクトルを選択できます。このロジックを繰り返すことで、常に最大成分の方向ベクトルを取得できるようになります。

まとめ:応用とさらなる活用

このロジックは、カーブの主要な方向を分析するだけでなく、サーフェスの法線ベクトルの支配的な方向を特定したり、複数のオブジェクトの配置方向を揃えたりするなど、様々な場面で応用できます。例えば、建築デザインで風向きや日照方向を考慮したファサードの開口部設計などにも活用できるでしょう。

今回ご紹介したテクニックは、Grasshopperでのベクトルの扱い方を理解し、より高度なパラメトリックデザインを実現するための基礎となります。ぜひ、ご自身のプロジェクトで試してみてくださいね。