2017-06-01 78 views
-1

我有问题,调用我的课程的方法aleatorio()。我需要使用我的ponto类的aleatorio()方法创建一个随机点p,因此我可以在interior()方法的retangulo类中使用它,以基本检查随机点是否落入每个矩形的内部, r1r2。但是,似乎我无法生成我需要的随机点p如何调用该方法?

from random import uniform 
class ponto: 
    def __init__(self,x,y): 
     self.x=float(x) 
     self.y=float(y) 

    def aleatorio(self): 
     ''' Ponto aleatorio com coordenadas 0.0 a 10.0 ''' 
     self.x=uniform(0.0,10.0) 
     self.y=uniform(0.0,10.0) 

class retangulo(): 
    def __init__(self,a,b): 
     self.a=a 
     self.b=b 

    def interior(self,p): 
     ''' Verifica se ponto no interior do retangulo ''' 
     if p.x >= self.a.x and p.x <=self.b.x and p.y >=self.a.y and p.y<=self.b.y: 
      return True 
     return False 

    def area(self): 
     return self.a*self.b 

a1=ponto(0.0,0.0) 
b1=ponto(2.0,2.0) 
r1=retangulo(a1,b1) 
b2=ponto(4.0,4.0) 
r2=retangulo(a1,b2) 

p=ponto(0.4,0.9) 
p.aleatorio() 

d1=0 
d2=0 
for r in range(10000): 
    if r1.interior(p)==True: 
     d1+=1 
    elif r2.interior(p)==True: 
     d2+=1 
print(d1,d2) 

至于建议我加入d1,d2打印返回:0 0d1d2应该是我的随机点分别落在r1r2之内的次数。我猜0要么意味着我不会产生随机点,或者我只是不计算它内部正确的次数,但我不知道是什么原因。

+0

请提供问题的证据。例如,插入一些打印语句以显示问题输出。 – Prune

+0

我从通话中获取号码并不困难。究竟是什么,告诉你没有随机点? – Prune

+0

我可以在这段代码中发现的唯一问题是完全无用的'for范围(10000):'。 –

回答

0

也许你的麻烦是循环,而不是滚动。 @AlanLeuthard非常正确:该代码生成一个单一点,然后检查10000次这两个矩形的每一个中是否有相同的点。试着做一个新的起点,通过循环每次:

d1=0 
d2=0 
for r in range(10000): 
    p.aleatorio() 
    if r1.interior(p)==True: 
     d1+=1 
    elif r2.interior(p)==True: 
     d2+=1 

print d1, d2 

输出:

397 1187 

这是否更好看?

+0

YES IT DOES!刚刚意识到我的错误,你是对的,它实际上总是检查同一点,非常感谢你:) –