回答編集履歴
1
d
test
CHANGED
@@ -109,3 +109,71 @@
|
|
109
109
|
|
110
110
|
|
111
111
|
![イメージ説明](59636149c3be7d4c19154926ed7a365a.png)
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
## 追記
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
```python
|
120
|
+
|
121
|
+
import matplotlib.pyplot as plt
|
122
|
+
|
123
|
+
import numpy as np
|
124
|
+
|
125
|
+
from sympy import *
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
init_printing()
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
x = Symbol('x')
|
134
|
+
|
135
|
+
c, k = 1, 3
|
136
|
+
|
137
|
+
z = -(c * x**2 / (1 + (1 - (1 + k) * c**2 * x**2)**0.5))
|
138
|
+
|
139
|
+
prime_z = Derivative(z, x).doit()
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
a = Symbol('a')
|
144
|
+
|
145
|
+
z_a = z.subs(x, a) # f(a)
|
146
|
+
|
147
|
+
prime_z_a = prime_z.subs(x, a) # f'(a)
|
148
|
+
|
149
|
+
tangent = prime_z_a * (x - a) + z_a # 点 (a, f(a)) の接線
|
150
|
+
|
151
|
+
normal = (-1 / prime_z_a) * (x - a) + z_a # 点 (a, f(a)) の法線
|
152
|
+
|
153
|
+
theta = deg(atan(-1 / prime_z_a)) # 法線の角度
|
154
|
+
|
155
|
+
```
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
```
|
160
|
+
|
161
|
+
xs = np.arange(0.1, 6.28, 0.1)
|
162
|
+
|
163
|
+
thetas = np.array([complex(theta.subs(a, t)) for t in xs])
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
# 保存
|
168
|
+
|
169
|
+
np.savetxt("points.csv", np.c_[xs, thetas.real, thetas.imag], delimiter=",")
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
# 読み込み
|
174
|
+
|
175
|
+
xs, real, imag = np.loadtxt("points.csv", delimiter=",", unpack=True)
|
176
|
+
|
177
|
+
thetas = real + 1j * imag
|
178
|
+
|
179
|
+
```
|