2020/03/23 公開
・単位ベクトル
単位ベクトルとは、長さ(ノルム)が1のベクトルのことです。下の図のように方向に関係なく、長さが1であれば単位ベクトルです。長さが1でないベクトルは単位ベクトルではありません。

下の図は、ベクトルの原点座標(x1,y1)と方向座標(x2,y2)が与えられたときに、そのベクトルと同じ原点(x1,y1)を持ち、同じ方向の単位ベクトルの座標(x,y)を計算する方法を表しています。


与えられた2つの座標(x1,y1)と(x2,y2)の距離lをピタゴラスの定理によって計算し、その距離lでx成分の差dxとy成分の差dyを割りdx'とdy'を求めます。dx'とdy'のそれぞれに(x1,y1)を足して(x,y)を求めます。
これをJavaのソースコードにしたものが以下です。
UnitVector.java ← クリックしてダウンロードページに移動001: public class UnitVector { 002: public static void main( String[] args ) { 003: double x1, y1; 004: double x2, y2; 005: double l; 006: double dx, dy; 007: double x, y; 008: 009: // 1つ目の座標を代入 010: x1 = 60.0; 011: y1 = 20.0; 012: 013: // 2つ目の座標を代入 014: x2 = 10.0; 015: y2 = 40.0; 016: 017: // x座標の差を計算してdxに代入 018: dx = x2 - x1; 019: // y座標の差を計算してdyに代入 020: dy = y2 - y1; 021: 022: // 2点間の距離を計算してlに代入 023: l = Math.sqrt( dx * dx + dy * dy ); 024: 025: // (x1,y1)から距離1の座標(x,y)を計算 026: x = dx / l + x1; 027: y = dy / l + y1; 028: 029: // 結果を表示 030: System.out.println( "x=" + x ); 031: System.out.println( "y=" + y ); 032: System.out.println( "距離=" + dist( x1, y1, x, y ) ); 033: } 034: 035: 036: // (x1,y1)-(x2,y2)の直線距離を計算するメソッド 037: private static double dist( double x1, double y1, double x2, double y2 ) 038: { 039: double l; 040: double dx, dy; 041: 042: // x座標の差を計算してdxに代入 043: dx = x2 - x1; 044: // y座標の差を計算してdyに代入 045: dy = y2 - y1; 046: 047: // 2点間の距離を計算してlに代入 048: l = Math.sqrt( dx * dx + dy * dy ); 049: 050: // 計算した距離を返す 051: return l; 052: } 053: }
UnitVector.javaの出力結果
x=59.07152330911474 y=20.371390676354103 距離=1.000000000000002
ここから、単位ベクトルの成分(x,y)を計算している箇所の説明をしていきます。
017: // x座標の差を計算してdxに代入 018: dx = x2 - x1; 019: // y座標の差を計算してdyに代入 020: dy = y2 - y1;
与えられた2つの座標(x1,y1)と(x2,y2)のx成分の差dxとy成分の差dyを計算しています。
022: // 2点間の距離を計算してlに代入 023: l = Math.sqrt( dx * dx + dy * dy );
dxの2乗とdyを2乗した値を足して平方根を計算して変数lに代入しています。このlが2つの座標の距離です。
025: // (x1,y1)から距離1の座標(x,y)を計算 026: x = dx / l + x1; 027: y = dy / l + y1;
dxとdyをそれぞれlで割って、単位ベクトルの成分xとyを求めています。このソースでは、lが0.0の場合にdxとdyを割らないように制御していません。dxとdyを0で割ると計算値がInfinity(無限大)になります。
029: // 結果を表示 030: System.out.println( "x=" + x ); 031: System.out.println( "y=" + y ); 032: System.out.println( "距離=" + dist( x1, y1, x, y ) );
単位ベクトルの成分のxを2乗した値とyを2乗した値を足すと1になります。この結果を確認するために画面出力しています。
■関連コンテンツ
2点間の距離 | 2点間の距離計算 |
平方根 | Math.sqrtの使い方について解説 |
三角関数 計算方法 | Mathを使わない三角関数 計算方法 |
逆三角関数 asin | asinの意味と、Math.asinの使い方について解説 |
逆三角関数 acos | acosの意味と、Math.acosの使い方について解説 |
![]() |
三角関数 sinsinの意味と、Math.sinメソッドの使い方をソースコードを使って解説しています。 |
![]() |
三角関数 coscosの意味と、Math.cosメソッドの使い方をソースコードを使って解説しています。 |
![]() |
三角関数 tantanの意味と、Math.tanメソッドの使い方をソースコードを使って解説しています。 |
![]() |
単位円単位円は半径が1の円のことです。単位円と三角関数(sinθ、cosθ)の関係についても解説しています。 |
■新着情報
2021.12.21 | 現在の日時を取得 | いまの年月日、時分秒? |
■広告
