スタートページJavaScriptライブラリ目次

幾何 JavaScript関数ライブラリ geo.js の利用解説書

ご利用にあたって

geoAtan2PI Math.atan のθ範囲変更
  θ = geoAtan2PI(x,y);  

θ = Math.atan(y/x) でのθをX軸から反時計回りに0≦θ<2πの範囲で求めます。
θ = atan2PI( 2, 1.732) = (1/3)π
θ = atan2PI(-2, 1.732) = (2/3)π
θ = atan2PI(-2,-1.732) = (4/3)π
θ = atan2PI( 2, 1.732) = (5/3)π

x= y= θ=rad (°)

geoRotation 点の回転
  rtn = geoRotation(xa, ya, t [, x0, y0]);  

点Aを、Oを中心に、X軸から逆時計回りに t(度)回転した点Bの座標を戻します。
 (x0,y0 を省略すると 0,0 になります。O点=原点)
  xb = rtn["xb"];  yb = rtn["yb"];

xa= ya= t= x0= y0=
rtn["xb"]= rtn["yb"]=
(補助)角度 t の変換
ラジアン 勾配

回転公式
  xb = (xa-x0)*cos(t) - (ya-y0)*sin(t) + x0;
  yb = (xa-x0)*sin(t) + (ya-y0)*cos(t) + y0;


geoLineExtend ベクトルの延長
  rtn = geoLineExtend(1, xa, ya, p [, x0, y0]);
  rtn = geoLineExtend(2, xa, ya, AB [, x0, y0]);  

ベクトルOAを延長したOBのB点の座標を戻します。
  O点=原点 (x0,y0 = 0)のとき省略できます。
 ptn = 1:d= = p    OB=OA * p
 ptn = 2:d= = AB  OB=OA * AB

ptn = 1 : xa= ya=  p= x0= y0= rtn["xb"]= rtn["yb"]=
ptn = 2 : xa= ya= AB= x0= y0= rtn["xb"]= rtn["yb"]=

geoLineDivide 線分の内外分点
  rtn = geoLineDivide(xa, ya, xb, yb, pa, pb);  

点Aからの距離:点Bからの距離=pa:pb の内分点 (xi,yi) と外分点 (xe,ye) を求めます。

xa= ya= xb= yb= pa= pb=
rtn["xi"]= rtn["yi"]= rtn["xe"]= rtn["ye"]=


geoLinePoint 線と直線の位置(中点、垂点)
  rtn = geoLinePoint(xa, ya, xb, yb, xc, yc);  

線分ABの中点D、点CのDの点対称点をE、
線分ABの点Cからの垂点F、点CのDの点対称点をGとします。
入力:A、B、Cの座標
出力:D、E、F、Gの座標
   AD、AFの長さ
   直線を px+qy+r = 0 としたときのAD、AFの p, q, r

xa= ya= xb= yb= xc= yc=
D点:rtn["xd"]= rtn["yd"]=
E点rtn["xe"]= rtn["ye"]=
CDの長さ:rtn["CD"]=
CDの式:px+qy+r=0:rtn["CDp"]= rtn["CDq"]= rtn["CDr"]=

F点:rtn["xf"]= rtn["yf"]=
G点:rtn["xg"]= rtn["yg"]=
CFの長さ:rtn["CF"]=
CFの式:px+qy+r=0:rtn["CFp"]= rtn["CFq"]= rtn["CFr"]=

geoLineCross 2線分の交差判定
  rtn = geoLineCross(xa, ya, xb, yb, xc, yc, xd, yd);  

直線ABとCDの交点Pの座標、線分ABとCDの交差判定(交わるか否か)をします。
  交点Pの座標:rtn["xp"], rtn["yp"]
  交差判定:rtn["cn"] = 1(交差する)/ 0(交差しない)
   ① 1 ② 0 ③ 0

xa= ya= xb= yb=
xc= yc= xd= yd=
rtn["xp"]= rtn["yp"]= rtn["cn"]=

一般形:rtn = geoTriSA(type, p1, p2, p3); 
  rtn = geoTriSA(3, AB, BC, CA)  // 3辺
  rtn = geoTriSA(2, AB, CA, A)   // 2辺夾角
  rtn = geoTriSA(1, BC, B, C)   // 2角夾辺

三角形の辺と内角の3つを与えて他の辺と内角と面積をを求めます。
   return [AB, BC, CA, A, B, C, S];
    AB = rtn["AB"];  A = rtn["A"];  S = rtn["S"];
 (角度はラジアンではなく度です。)

type=3: AB= BC= CA=
type=2: AB= CA= A=
type=1: BC= B= C=
rtn["AB"]= rtn["BC"]= rtn["CA"]=
rtn["A"]= rtn["B"]= rtn["C"]=
rtn["S"]=

三角形の頂点座標を与えて、辺長、内角、5心を得る
  rtn = geoTriVertex(xa,ya, xb,yb, xc,yc);  

[拡大図]
三角形の頂点座標 (xa,ya, xb,yb, xc,yc) を与えて、上図で示した諸元を戻します。
戻り値の形式は連想配列ですので、例えば「 var 面積 = rtn["S"] 」とします。

xa= ya=  xb= yb=  xc= yc= 


多角形の面積
  s = geoPolyS(x0,y0, x1,y1, …);  

自己交差を持たないn個の線分からなるn角形の頂点座標を与えて、面積 S を求めます。

x=
y=
S=

正多角形
  rtn = geoPolyRegA(n, a);  

正n角形の一辺の長さ a を与えて、諸元を求めます。

n= a=
φ= θ= r= R= S=

正多角形
  rtn = geoPolyRegR(n, R);  

正n角形の外接円の半径 R を与えて、諸元を求めます。

n= R=
φ= θ= a= r= S=

円と球
  rtn = geoCircleSphere(記号, 値);  

以下の任意の1つの値を与えて、他の4つを求めます。
  例:半径 = 2 を与える → rtn = geoCircleSphere("R", 2);

 記号 公式
 半径 R R
 円周 L 2*π*R
 円面積 S π*R2
 球面積 SS 4*π*R2
 球体積 V (4/3)*π*R3
記号= 値=
rtn["R"]= rtn["L"]= rtn["S"]= rtn["SS"]= rtn["V"]=

円と直線
  rtn = geoCircleLine(x0, y0, r, a, b, c);  

中心 (x0,y0)、半径 r の円と、直線 ax + by + c = 0 の距離 d と交点A、Bの座標
交点の個数を求めます。
 (交わらないときは、xa,ya, xb,yb = 0 を戻します)

x0= y0= r= a=  b= c= 
rtn["d"]= rtn["cn"]=
rtn["xa"]= rtn["ya"]=  rtn["xb"]= rtn["yb"]=

円と線分の交点
  rtn = geoCircleLineSeg(x0, y0, r, xa, ya, xb, yb);  

中心 (x0,y0)、半径 r の円と、2点A,Bを通る線分との垂直距離 d と交点C、Dの座標、 および、交点の個数 cn を求めます。
  ① C、Dあり cn = 2
  ② C、Dあり cn = 1
  ③ C、Dあり cn = 0
  ④ すべて0  cn = 0

x0= y0= r= xa= ya= xb= yb=
rtn["d"]= rtn["cn"]=
rtn["xc"]= rtn["yc"]=  rtn["xd"]= rtn["yd"]=

2円の交点
  rtn = geoCircle2(xa, ya, ra, xb, yb, rb);  

入力:中心(xa,ya), 半径 ra の円と、中心(xb,yb), 半径 rb の円
出力:AB 2円の中心の距離
   cn 交点の個数
     = 0 ra+rb < AB      互いに外部にあり公差しない
     = 0     AB < |ra-rb| 一方の円の内部に他方の円。交点なし
     = 1 ra+rb = AB      2円が接する
     = 2 それ以外       2円が重なる
  (cn ≠ 0 のとき、次の値を出力)
   xc, yc, xd, yd 交点C、Dの座標
    (C.Dの位置は逆になることもあります)
   CD 線分CDの長さ
   a, b, c 直線CDの方程式 ax + by + c = 0
   ta, tb 円中心と交点の角度
   Sa, Sb 重なった部分の面積

xa= ya= ra=  xb= yb= rb=
rtn["cn"]= rtn["AB"]=
rtn["xc"]= rtn["yc"]=  rtn["xd"]= rtn["yd"]=
rtn["CD"]=  rtn["a"]= rtn["b"]= rtn["c"]=
rtn["ta"]= rtn["tb"]=  rtn["Sa"]= rtn["Sb"]=

楕円
  rtn = geoEllips(x0, y0, rx, ry t);  

入力:中心(x0,y0), 半径 rx, ry, X軸との傾き t(度) の楕円
   (x-x0)2/rx2 + (y-y0)2/ry2 = 1 を (x0,y0) を中心に t 度回転
出力:wxx, wxy, wyy // 楕円の方程式
      // wxx*(x-x0)2 - 2wx(y-y0)(x-x0)*y + wyy*(y-y0)2 = 1;
   xa1,ya1, xa2,ya2, xb1,yb1, xb2,yb2  // A、A'、B、B' の座標
   xc1,yc1, xc2,yc2, xd1,yd1, xd2,yd2  // C、C'、D、D' の座標
   xf1,yf1, xf2,yf2           // 焦点 F、F' の座標

x0= y0= rx= ry= t=
rtn["wxx"]= rtn["wxy"]= rtn["wyy"]=
A:rtn["xa1"]= rtn["ya1"]=  rtn["xa2"]= rtn["ya2"]=
B:rtn["xb1"]= rtn["yb1"]=  rtn["xb2"]= rtn["yb2"]=
C;rtn["xc1"]= rtn["yc1"]=  rtn["xc2"]= rtn["yc2"]=
D:rtn["xd1"]= rtn["yd1"]=  rtn["xd2"]= rtn["yd2"]=
F:rtn["xf1"]= rtn["yf1"]=  rtn["xf2"]= rtn["yf2"]=
(補助)角度 t の変換
ラジアン 勾配

計算の概要