teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

d

2018/12/13 10:00

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -53,4 +53,38 @@
53
53
  plt.show()
54
54
  ```
55
55
 
56
- ![イメージ説明](59636149c3be7d4c19154926ed7a365a.png)
56
+ ![イメージ説明](59636149c3be7d4c19154926ed7a365a.png)
57
+
58
+ ## 追記
59
+
60
+ ```python
61
+ import matplotlib.pyplot as plt
62
+ import numpy as np
63
+ from sympy import *
64
+
65
+ init_printing()
66
+
67
+ x = Symbol('x')
68
+ c, k = 1, 3
69
+ z = -(c * x**2 / (1 + (1 - (1 + k) * c**2 * x**2)**0.5))
70
+ prime_z = Derivative(z, x).doit()
71
+
72
+ a = Symbol('a')
73
+ z_a = z.subs(x, a) # f(a)
74
+ prime_z_a = prime_z.subs(x, a) # f'(a)
75
+ tangent = prime_z_a * (x - a) + z_a # 点 (a, f(a)) の接線
76
+ normal = (-1 / prime_z_a) * (x - a) + z_a # 点 (a, f(a)) の法線
77
+ theta = deg(atan(-1 / prime_z_a)) # 法線の角度
78
+ ```
79
+
80
+ ```
81
+ xs = np.arange(0.1, 6.28, 0.1)
82
+ thetas = np.array([complex(theta.subs(a, t)) for t in xs])
83
+
84
+ # 保存
85
+ np.savetxt("points.csv", np.c_[xs, thetas.real, thetas.imag], delimiter=",")
86
+
87
+ # 読み込み
88
+ xs, real, imag = np.loadtxt("points.csv", delimiter=",", unpack=True)
89
+ thetas = real + 1j * imag
90
+ ```