让我说我有一个物体,我必须通过射击(射弹运动)来消灭。对象的位置是随机的(就像现在一样,只是整数,以使其更容易)。即使我的子弹'看起来只是到位,循环不会破裂。可能程序并不认为图1和图2在任何点都是相等的。 我尝试了一些关于它的事情,如果条件但没有任何效果。 谁能告诉我必须添加/更改的内容?
import matplotlib.pylab as plt
import numpy as np
import random
g = 10
c = []
d = []
fig = plt.figure()
L = random.randint(5.0,18.0)
while True:
try:
#velocity
v = float(input("What is the velocity?\n>"))
#angle
a = np.radians(float(input("What is the angle?\n>")))
z = np.sin(2*a)*v**2/g #max range
h = ((v**2*(np.sin(a))**2)/(2*g)) #max. height
x= np.linspace(0, z, 1000)
#y values
y = (x*np.tan(a) - (g*x**2)/(2*v**2*((np.cos(a))**2)))
ax = plt.axes(xlim=(0, 1.5*L), ylim=(0, 1.2*h))
plt.ion() #interactive graph
#previous tries
plt.plot(c,d, '.', color = 'lightgrey')
plt.pause(0.01)
#enemy object
graph1 = plt.plot(L, 0, 'o', color = 'r', markersize=30)
plt.pause(0.01)
#actual shoot
graph2 = plt.plot(x,y, '.', color = 'b', ms = 7)
plt.pause(0.01)
if np.any(graph2) == np.any(graph1):
print("You have destroyed the enemy object!")
plt.show()
break
else:
print("You've missed. Keep shooting!")
c.append(x)
d.append(y)
plt.show()
continue
except ValueError:
print("Sorry, I can't understand.")
答案 0 :(得分:0)
您根本不需要绘图来找到交叉点。事实上,我不认为matplotlib可以在这里提供帮助。 plt.plot的返回值是一个包含单个Line2D对象的列表 - 您可以通过执行
来获取原始的x和y值。x_new = graph1[0].get_xdata()
y_new = graph1[0].get_ydata()
但是,如果您的代码出于某种原因分析由完全不同的函数生成的图并且不允许拥有原始数据,那么您只会这样做。在你的情况下,只需直接使用你的x和y,找到交集。看起来你可能正在尝试
if np.any((y == 0) * (x == L)):
print "You have destroyed the enemy object!"
应该检查是否有任何点(x,y)位于(0,L)。 *充当布尔数组的逐元素'和'运算符。 Here are some more comprehensive answers about finding intersections of two arrays.
如果您正在尝试构建游戏,请查看pygame。与numpy相比,它有各种方法来检测碰撞。