Python 为什么图的两个参数不相等?

Python 为什么图的两个参数不相等?,python,numpy,matplotlib,plot,while-loop,Python,Numpy,Matplotlib,Plot,While Loop,假设我有一个物体,我必须通过射击(抛射运动)来摧毁它。对象的位置是随机的(就目前而言,只是整数,以使其更容易)。即使我的“子弹”看起来正好到位,循环也不会中断。程序可能不认为图1和图2在任何点都是相等的。 我尝试了一些关于这种情况的方法,但没有任何效果。 有人能告诉我我必须添加/更改什么吗 import matplotlib.pylab as plt import numpy as np import random g = 10 c = [] d = [] fig = plt.figure()

假设我有一个物体,我必须通过射击(抛射运动)来摧毁它。对象的位置是随机的(就目前而言,只是整数,以使其更容易)。即使我的“子弹”看起来正好到位,循环也不会中断。程序可能不认为图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.")

你根本不需要绘图来找到交叉点。事实上,我认为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)处。*充当布尔数组的逐元素“and”运算符


如果你想建立一个游戏,看看pygame。它有各种各样的方法比numpy更容易检测碰撞。

你是说
np.any(graph2==graph1)
,还是
(graph1==graph2)。any()
?我不确定这些方法是否可行。我只是想知道他们是否是平等的,然后打破循环。