fork download
  1. #!/usr/bin/python
  2. # coding: utf8
  3. # ベクトルの外積から求める方法
  4.  
  5. # 2点からベクトルを求める
  6. # 引数 p1, p2 : (x, y, z)のタプル
  7. def get_vector(p1, p2):
  8. x = p2[0] - p1[0]
  9. y = p2[1] - p1[1]
  10. z = p2[2] - p1[2]
  11. return (x, y, z)
  12.  
  13. # 2つのベクトルから外積を求める
  14. # 引数 v1, v2 : (x, y, z)のタプル
  15. def get_cross_product(v1, v2):
  16. x = (v1[1] * v2[2]) - (v1[2] * v2[1])
  17. y = (v1[2] * v2[0]) - (v1[0] * v2[2])
  18. z = (v1[0] * v2[1]) - (v1[1] * v2[0])
  19. return (x, y, z)
  20.  
  21. # メイン
  22. def main():
  23. pa = (50, 600, 900)
  24. pb = (385, 630, 905)
  25. pc = (260, 30, 915)
  26.  
  27. #ベクトルをつくる
  28. vab = get_vector(pa, pb) # a から b へ向かうベクトル
  29. vac = get_vector(pa, pc) # a から c へ向かうベクトル
  30. print('vab=' + str(vab))
  31. print('vac=' + str(vac))
  32.  
  33. # 求める平面の法線ベクトル(=vabとvacの外積)を求める
  34. vn = get_cross_product(vab, vac)
  35. '''
  36. 法線ベクトル vn = (p, q, r), 平面上の任意の点 P0=(x0, y0, z0) とすれば
  37. p(x-x0) + q(y-y0) + r(z-z0) = 0 が求める平面の方程式
  38. ax + by + cz = d の形へ直すと a,b,c,d の各値は
  39. a = p, b = q, c = r
  40. d = p*x0 + q*y0 + r*z0
  41. '''
  42. d = vn[0]*pa[0] + vn[1]*pa[1] + vn[2]*pa[2] # paの値を使ってdを計算(pb,pcでも一緒)
  43.  
  44. # 結果の表示
  45. print('a= ', str(vn[0]))
  46. print('b= ', str(vn[1]))
  47. print('c= ', str(vn[2]))
  48. print('d= ', str(d))
  49.  
  50. # プログラム開始
  51. if __name__ == '__main__':
  52. main()
Success #stdin #stdout 0.01s 28384KB
stdin
Standard input is empty
stdout
vab=(335, 30, 5)
vac=(210, -570, 15)
a=  3300
b=  -3975
c=  -197250
d=  -179745000