28 lines
828 B
Python
28 lines
828 B
Python
import random
|
|
|
|
|
|
class SimulatedDiode(ReadonlyRegisterBase):
|
|
|
|
def __init__(self, name):
|
|
ReadonlyRegisterBase.__init__(self, name)
|
|
self.x=0.0
|
|
self.y=0.0
|
|
self.radius=0.125
|
|
self.amplitude = 600.0
|
|
self.offset=200.0
|
|
self.border = 0.025
|
|
|
|
def doRead(self):
|
|
x,y = scx.position, scy.position
|
|
noise = random.random() * self.amplitude/100.0
|
|
d = math.hypot(x-self.x, y-self.y)
|
|
#print d
|
|
if d>self.radius:
|
|
return self.offset + noise
|
|
elif d< (self.radius - self.border ):
|
|
return self.offset + noise + self.amplitude
|
|
else :
|
|
return self.offset + noise + self.amplitude *(self.radius - d)/self.border
|
|
|
|
def set_center(self, x, y):
|
|
self.x, self.y = x, y |