ゆるゆるプログラミング

・単位ベクトル

単位ベクトルとは、長さ(ノルム)が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

■関連コンテンツ

2点間の距離 2点間の距離計算
三角関数 計算方法 三角関数 計算方法
三角関数 sin sinの意味と、Math.sinの使い方について解説
三角関数 cos cosの意味と、Math.cosの使い方について解説
三角関数 tan tanの意味と、Math.tanの使い方について解説
逆三角関数 asin asinの意味と、Math.asinの使い方について解説
逆三角関数 acos acosの意味と、Math.acosの使い方について解説

■新着情報

2017.11.17 N値化 カラー画像をN値化する方法について解説
2017.11.16 最も近い値の取得 指定値に最も近い配列の値を取得する方法を解説
2017.10.02 アルファ値(透過) アルファ値(透過)について

■広告

法人向けのETC専用カード

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

Topへ