1

漸近線を削除するにはどうすればよいですか?

import numpy as np

e = 1.26
beta = .705 * np.pi
rph = 7000
re = 6378

def r(nuh):
    return rph * (1 + e) / (1 + e * np.cos(nuh + beta))


theta = np.linspace(-np.pi, np.pi, 50000)

fig2 = pylab.figure()
ax2 = fig2.add_subplot(111)
ax2.plot(r(theta) * np.cos(theta), r(theta) * np.sin(theta))
ax2.plot(rph * np.cos(theta), rph * np.sin(theta), 'r')
#  adding the Earth                                                                 
earth2 = pylab.Circle((0, 0), radius = re, color = 'b')
ax2.add_patch(earth2)
pylab.xlim((-50000, 100000))
pylab.ylim((-50000, 100000))
pylab.show()

漸近線付き

4

1 に答える 1

3

ここでわかるように、発散点を に設定するnp.nanと、それらがプロットされなくなります。

あなたの問題では、r(theta)どちらが発散するかです。rthetaを通常の方法で定義しますが、 の極値を に設定r(theta)np.nanます。

これを行うには、最初に配列を作成し、次にその極値を に変更しnp.nanます。

rt = r(theta)
ext = [np.argmin(rt), np.argmax(rt)]
rt[ext] = np.nan

rtここで、元の関数ではなく、変更された配列でプロットしてください。

ax2.plot(rt * np.cos(theta), rt * np.sin(theta))

漸近線はありません:)

于 2013-05-08T20:15:17.680 に答える