コード例 #1
0
ファイル: HexBoard.py プロジェクト: cezheng/zHex
class HexBlock:
    Xs = Vector([-1.0, -0.5, 0.5, 1, 0.5, -0.5])
    Ys = Vector([.0, halfSq3, halfSq3, .0, -halfSq3, -halfSq3])
    Vec = [Vector(v) for v in [(0, 1), (halfSq3, 0.5), (halfSq3, -0.5)]]

    def __init__(self, win, edgeLen, center):
        self.win = win
        self.X, self.Y = center
        self.xs = HexBlock.Xs * edgeLen
        self.ys = HexBlock.Ys * edgeLen
        self.edgeLen = edgeLen
        self.player = None
        points = []
        for i in range(6):
            points.append(Point(self.xs[i] + self.X, self.ys[i] + self.Y))
        self.region = Polygon(points)
        self.region.setWidth(2)
        self.region.draw(self.win)
        self.piece = Circle(Point(self.X, self.Y), self.edgeLen / 2)

    def undraw(self):
        self.region.undraw()
        self.piece.undraw()

    def clickIn(self, x, y):
        dv = Vector([x - self.X, y - self.Y])
        limit = halfSq3 * self.edgeLen
        for v in HexBlock.Vec:
            if abs(v * dv) > limit:
                return False
        return True

    def placePiece(self, player):
        if self.player == None:
            self.piece.setFill(player.getColor())
            self.piece.draw(self.win)
            self.player = player.getNum()
            return True
        else:
            return False

    def removePiece(self):
        if self.player != None:
            self.player = None
            self.piece.undraw()
            return True
        else:
            return False

    def getCenter(self):
        return self.X, self.Y

    def getPlayer(self):
        return self.player
コード例 #2
0
    def newAABB(self, obj, owner):
        obj.tl = Vector(99999, -9999, -999999)
        obj.br = Vector(-99999, 9999, 999999)
        for mesh in owner.getComponentsByType(MeshComponent):
            for triangle in mesh.triangles:
                for vertex in triangle:
                    obj.tl.x = min(vertex[0], obj.tl.x)
                    obj.tl.y = max(vertex[1], obj.tl.y)
                    obj.tl.z = max(vertex[2], obj.tl.z)

                    obj.br.x = max(vertex[0], obj.br.x)
                    obj.br.y = min(vertex[1], obj.br.y)
                    obj.br.z = min(vertex[2], obj.br.z)
コード例 #3
0
ファイル: HexBoard.py プロジェクト: cezheng/zHex
 def clickIn(self, x, y):
     dv = Vector([x - self.X, y - self.Y])
     limit = halfSq3 * self.edgeLen
     for v in HexBlock.Vec:
         if abs(v * dv) > limit:
             return False
     return True
コード例 #4
0
 def deserialize(ser):
     num_labels = len(ser['nodes'])
     num_weights = len(ser['nodes'][0]['weights'])
     layer = PerceptronLayer(num_labels, num_weights, activation.from_name(ser['activation']))
     for node_ser, node in zip(ser['nodes'], layer.nodes):
         node.weights = Vector(node_ser['weights'])
         node.bias = node_ser['bias']
     return layer
コード例 #5
0
    def __init__(self,
                 position=Vector(0, 0, 0),
                 velocity=Vector(0, 0, 0),
                 acceleration=Vector(0, 0, 0),
                 a_position=Vector(0, 0, 0),
                 a_velocity=Vector(0, 0, 0),
                 a_acceleration=Vector(0, 0, 0),
                 bounded=True):
        # , anchor=Vector(0,0,0)):
        super().__init__()
        # Linear
        self.oldS = Vector(0, 0, 0)
        self.S = position
        self.V = velocity
        self.A = acceleration
        # Rotational
        # Ie, rotation around x axis, y axis, z axis (euler angles)
        # Very simple, temporary code.
        # Note that this is in degrees
        self.THETA = a_position
        # theta, phi,
        self.OMEGA = a_velocity
        self.ALPHA = a_acceleration

        self.bounded = bounded
コード例 #6
0
 def handle_aiming_action(self, key):
     self.hero.set_state("moving")
     if (key in self.movement_keys.keys()):
         vector = Vector(self.movement_keys[key][0],
                         self.movement_keys[key][1])
         zap = Zap(self.hero.x, self.hero.y)
         self.add_zap_at_vector(zap, vector)
     else:
         return True
コード例 #7
0
ファイル: eovsa_array.py プロジェクト: natsuhakuroda/eovsa
def eovsa_array():
    ''' Define EOVSA antenna array, which consists of tabulated E,N,U
        locations of 15 antennas plus "array center", latitude,
        longitude and elevation of array center.  Returns AIPY
        AntennaArray object.
    '''
    global lat
    mperns = 0.299792458  # Meters per nanosecond

    # Define antenna ENU locations.  Ant 16 is the test input (0,0,0).
    # Divide by mperns to convert m to ns.
    ante = numpy.array([
        187.86, 196.15, 175.11, 197.96, 194.11, 147.42, 266.83, 98.95, 20.35,
        167.43, -442.00, 640.22, -329.06, -631.00, -213.00, 0.0
    ]) / mperns
    antn = numpy.array([
        71.74, 75.14, 77.39, 50.25, 108.86, 35.91, 67.10, 169.34, -218.49,
        280.78, -138.59, -355.82, 861.82, -184.00, -187.00, 0.0
    ]) / mperns
    antu = numpy.zeros(16)

    lng = -118.286953 * numpy.pi / 180  # OVSA Longitude (radians)
    elev = 1207.0  # OVSA Elevation (meters)
    clat = cos(lat)
    slat = sin(lat)

    # Latitude rotation matrix to convert ENU to XYZ
    latrot = mat([[0, -slat, clat], [1, 0, 0], [0, clat, slat]])
    f = numpy.array([1.0])
    beam = aipy.phs.Beam(f)
    ants = []
    for i in range(16):
        enu = Vector([ante[i], antn[i], antu[i]])
        x, y, z = enu.rotate(latrot).get()
        # Apply (add) any baseline corrections
        xp, yp, zp = bl_cor(x, y, z, i)
        ants.append(aipy.phs.Antenna(xp, yp, zp, beam))

    aa = aipy.phs.AntennaArray(ants=ants, location=(lat, lng, elev))
    aa.horizon = '10:30:00'
    aa.compute_pressure()
    # Create some standard sources for the source catalog
    srcs = []
    srcs.append(aipy.amp.RadioSpecial('Sun'))
    srcs.append(aipy.amp.RadioSpecial('Moon'))
    cat = aipy.amp.SrcCatalog(srcs)
    cat.compute(aa)
    # Attach catalog to aa object
    aa.cat = cat
    return aa
コード例 #8
0
 def features(self):
     """
     Returns a dict from features names to values:
     - One features for each pixel (e.g. (4,3) -> 1)
     - components=1
     - components=2
     - components=3
     - Other features...
     """
     if not self._features:
         width = len(self.pixels[0])
         height =  len(self.pixels)
         self._features = Vector(self.pixels[i / width][i % width] / 256.0
                                 for i in xrange(width * height))
     return self._features
コード例 #9
0
 def addSVAComponent(self,
                     position=Vector(0, 0, 0),
                     velocity=Vector(0, 0, 0),
                     acceleration=Vector(0, 0, 0),
                     a_position=Vector(0, 0, 0),
                     a_velocity=Vector(0, 0, 0),
                     a_acceleration=Vector(0, 0, 0),
                     bounded=True):
     self.addComponent(
         SVAComponent(position, velocity, acceleration, a_position,
                      a_velocity, a_acceleration, bounded))
コード例 #10
0
ファイル: HexBoard.py プロジェクト: cezheng/zHex
 def locate(self, p):
     x, y = p.getX(), p.getY()
     if self.size == 1:
         if self.grid[0][0].clickIn(x, y):
             return (0, 0)
         else:
             return ()
     elif self.size == 2:
         cord1 = 0
         cord2 = 0
     else:
         dv = Vector([x - self.Xo, y - self.Yo])
         prod1 = dv * HexBoard.Vec[1]
         prod2 = dv * HexBoard.Vec[0]
         if halfSq3 * dv[1] + 0.5 * dv[0] > 0:
             param1 = -1  #rotate 30 degree counter-clockwise
         else:
             param1 = 1
         if halfSq3 * dv[1] - 0.5 * dv[0] < 0:
             param2 = -1  #rotate 30 degree clockwise
         else:
             param2 = 1
         cord1 = int((prod1 + param1 * math.sqrt(
             (dv * dv - prod1 * prod1) / 3)) / (sq3 * self.gridLen))
         cord2 = int((prod2 + param2 * math.sqrt(
             (dv * dv - prod2 * prod2) / 3)) / (sq3 * self.gridLen))
     if not (0 <= cord1 < self.size and 0 <= cord2 < self.size):
         return ()
     if self.grid[cord1][cord2].clickIn(x, y):
         return (cord1, cord2)
     elif cord1 + 1 < self.size and self.grid[cord1 + 1][cord2].clickIn(
             x, y):
         return (cord1 + 1, cord2)
     elif cord2 + 1 < self.size and self.grid[cord1][cord2 + 1].clickIn(
             x, y):
         return (cord1, cord2 + 1)
     elif cord1 + 1 < self.size and cord2 + 1 < self.size and self.grid[
             cord1 + 1][cord2 + 1].clickIn(x, y):
         return (cord1 + 1, cord2 + 1)
     else:
         return ()
コード例 #11
0
    def update(self, _):
        # First, update for changes in SVA
        for e, c in self.eman.pairsForType(CollisionComponent):
            if c.AABB:
                self.newAABB(c, e)

        for e0, c0 in self.eman.pairsForType(CollisionComponent):
            if c0.active:
                for e1, c1 in self.eman.pairsForType(CollisionComponent):
                    if e0 is not e1 and c1.active and c1.type_ in c0.typeCollide:
                        if c0.AABB and c1.AABB:
                            bCollides = self.collidesWithAABB(c0, c1)
                            #bCollides = self.collidesWithTriangles(c0, c1)
                        else:
                            # Triangle intersections, baby!
                            bCollides = self.collidesWithTriangles(c0, c1)
                        if bCollides:
                            s = e0.getSingleComponentByType(SVAComponent)
                            s.A = Vector(x=0, y=1, z=0, w=1)
                            print(e0, " collides with ", e1)
                            print(int(round(time.time() * 1000)))
コード例 #12
0
ファイル: HexBoard.py プロジェクト: cezheng/zHex
class HexBoard:
    Vec = [Vector(v) for v in [(halfSq3, 0.5), (halfSq3, -0.5)]]
    adVec = [
        Vector(v) for v in [(1, 0), (0, 1), (-1, 0), (0, -1), (-1, 1), (1, -1)]
    ]

    def __init__(self, win, size, gridLen, origin):
        self.active = True
        self.mark1, self.mark2 = [0] * size, [0] * size
        self.win = win
        self.size = size
        self.gridLen = gridLen
        self.grid = []
        self.moveStack = Stack(size * size)
        for i in range(size):
            self.grid.append([])
        self.Xo, self.Yo = origin.getX(), origin.getY()
        pio = self.Xo, self.Yo
        for i in range(size):
            newCenter = pio
            for j in range(size):
                newGrid = HexBlock(win, gridLen, newCenter)
                self.grid[i].append(newGrid)
                newCenter = (newCenter[0] + 1.5 * gridLen,
                             newCenter[1] + halfSq3 * gridLen)
            pio = (pio[0] + 1.5 * gridLen, pio[1] - halfSq3 * gridLen)
        self.drawOuterLines()

    def undraw(self):
        if not self.active:
            return
        map(lambda item: item.undraw, self.lines)
        map(lambda row: map(lambda item: item.undraw(), row), self.grid)
        self.active = False

    def drawOuterLines(self):
        self.lines = []
        p1 = Point(self.Xo - self.gridLen * 2, self.Yo)
        p2 = Point(self.Xo + 1.5 * (self.size - 1) * self.gridLen,
                   self.Yo + halfSq3 * (self.size + 1.0 / 3) * self.gridLen)
        p3 = Point(self.Xo + (3 * self.size - 1) * self.gridLen, self.Yo)
        p4 = Point(self.Xo + 1.5 * (self.size - 1) * self.gridLen,
                   self.Yo - halfSq3 * (self.size + 1.0 / 3) * self.gridLen)
        ps = [p1, p2, p3, p4]
        for i in range(4):
            self.lines.append(Line(ps[i], ps[(i + 1) % 4]))
            if i % 2:
                self.lines[i].setOutline("red")
            else:
                self.lines[i].setOutline("blue")
            self.lines[i].setWidth(2)
            self.lines[i].draw(self.win)

    def locate(self, p):
        x, y = p.getX(), p.getY()
        if self.size == 1:
            if self.grid[0][0].clickIn(x, y):
                return (0, 0)
            else:
                return ()
        elif self.size == 2:
            cord1 = 0
            cord2 = 0
        else:
            dv = Vector([x - self.Xo, y - self.Yo])
            prod1 = dv * HexBoard.Vec[1]
            prod2 = dv * HexBoard.Vec[0]
            if halfSq3 * dv[1] + 0.5 * dv[0] > 0:
                param1 = -1  #rotate 30 degree counter-clockwise
            else:
                param1 = 1
            if halfSq3 * dv[1] - 0.5 * dv[0] < 0:
                param2 = -1  #rotate 30 degree clockwise
            else:
                param2 = 1
            cord1 = int((prod1 + param1 * math.sqrt(
                (dv * dv - prod1 * prod1) / 3)) / (sq3 * self.gridLen))
            cord2 = int((prod2 + param2 * math.sqrt(
                (dv * dv - prod2 * prod2) / 3)) / (sq3 * self.gridLen))
        if not (0 <= cord1 < self.size and 0 <= cord2 < self.size):
            return ()
        if self.grid[cord1][cord2].clickIn(x, y):
            return (cord1, cord2)
        elif cord1 + 1 < self.size and self.grid[cord1 + 1][cord2].clickIn(
                x, y):
            return (cord1 + 1, cord2)
        elif cord2 + 1 < self.size and self.grid[cord1][cord2 + 1].clickIn(
                x, y):
            return (cord1, cord2 + 1)
        elif cord1 + 1 < self.size and cord2 + 1 < self.size and self.grid[
                cord1 + 1][cord2 + 1].clickIn(x, y):
            return (cord1 + 1, cord2 + 1)
        else:
            return ()

    def placePiece(self, cord, player):
        success = self.grid[cord[0]][cord[1]].placePiece(player)
        if not success: return False
        n = player.getNum()
        if n == 1: self.mark1[cord[0]] += 1
        elif n == 2: self.mark2[cord[1]] += 1
        self.moveStack.push(HexMove(player, cord))
        return success

    def removePiece(self):
        cord = self.moveStack.pop()
        if cord != None:
            cord = cord.getPos()
        else:
            return False
        n = self.grid[cord[0]][cord[1]].getPlayer()
        success = self.grid[cord[0]][cord[1]].removePiece()
        if not success: return False
        if n == 1: self.mark1[cord[0]] -= 1
        elif n == 2: self.mark2[cord[1]] = -1
        return success

    def redo(self):
        item = self.moveStack.redo()
        if item != None:
            player = item.getPlayer()
            cord = item.getPos()
            success = self.grid[cord[0]][cord[1]].placePiece(player)
            if not success: return False
            n = player.getNum()
            if n == 1: self.mark1[cord[0]] += 1
            elif n == 2: self.mark2[cord[1]] += 1
        return False

    def winner(self):
        if 0 in self.mark1 and 0 in self.mark2: return None
        if self.scan(1):
            return 1
        elif self.scan(2):
            return 2
        else:
            return None

    def inRange(self, pos):
        return 0 <= pos[0] < self.size and 0 <= pos[1] < self.size

    def getAdjacent(self, iset):
        adjacent = set()
        for item in iset:
            for v in HexBoard.adVec:
                candidate = tuple(map(sum, zip(item, v)))
                if self.inRange(candidate): adjacent.add(candidate)
        return adjacent

    def scan(self, player):
        adjacent = set()
        for j in range(self.size):
            iset = set()
            for i in range(self.size):
                if player == 1:
                    p = self.grid[j][i].getPlayer()
                    additem = (j, i)
                elif player == 2:
                    p = self.grid[i][j].getPlayer()
                    additem = (i, j)
                if player == p:
                    iset.add(additem)
            if iset.isdisjoint(adjacent) and j > 0:
                return False
            adjacent = self.getAdjacent(iset)
        return True

    def getGrid(self):
        return self.grid

    def getStack(self):
        return self.moveStack
コード例 #13
0
class Direction(object):
    UP = Vector(0, -1)
    DOWN = Vector(0, 1)
    LEFT = Vector(-1, 0)
    RIGHT = Vector(1, 0)
コード例 #14
0
        elif option == 1:
            if vectores.count() == 0:
                if not os.path.exists('data/vectores.txt'):
                    print 'Copie y pegue sus 2000 vectores en la carpeta data, yo le espero'
                    time.sleep(3.5)
                    print 'yamete kudasai onii-chan'

                else:
                    arch = open('data/vectores.txt', 'r')
                    data = arch.readlines()
                    arch.close()

                    #begin creation and insertion
                    for vec_txt in data:
                        vectores.insert_one(Vector(vec_txt).__dict__)

                    del arch, data  #release

                    print 'data stored in mongodb!'
            else:
                print 'mongodb already contains data'

        elif option == 2:
            vec_cursor = vectores.find()

            try:
                for i in range(5):
                    pprint(vec_cursor.next())

            except StopIteration:
コード例 #15
0
 def __init__(self, layer, num_weights):
     self.layer = layer
     self.weights = Vector(random.gauss(0, 0.01) for _ in xrange(num_weights))
     self.bias = random.gauss(0, 0.01)
コード例 #16
0
 def feed_forward(self, example):
     return Vector(node.feed_forward(example) for node in self.nodes)
コード例 #17
0
ファイル: genreco.py プロジェクト: ldorofeeva/tofu
    def _compute_one_parameter(self, param_value, index):
        source_position = np.array([
            get_scarray_value(self.args.source_position_x, index),
            get_scarray_value(self.args.source_position_y, index),
            get_scarray_value(self.args.source_position_z, index)
        ])
        axis = Vector(x_angle=get_scarray_value(self.args.axis_angle_x, index),
                      y_angle=get_scarray_value(self.args.axis_angle_y, index),
                      z_angle=get_scarray_value(self.args.axis_angle_z, index),
                      position=[
                          get_scarray_value(self.args.center_position_x,
                                            index), 0,
                          get_scarray_value(self.args.center_position_z, index)
                      ])
        detector = Vector(x_angle=get_scarray_value(self.args.detector_angle_x,
                                                    index),
                          y_angle=get_scarray_value(self.args.detector_angle_y,
                                                    index),
                          z_angle=get_scarray_value(self.args.detector_angle_z,
                                                    index),
                          position=[
                              get_scarray_value(self.args.detector_position_x,
                                                index),
                              get_scarray_value(self.args.detector_position_y,
                                                index),
                              get_scarray_value(self.args.detector_position_z,
                                                index)
                          ])
        volume_angle = Vector(
            x_angle=get_scarray_value(self.args.volume_angle_x, index),
            y_angle=get_scarray_value(self.args.volume_angle_y, index),
            z_angle=get_scarray_value(self.args.volume_angle_z, index))

        z = self.args.z
        if self.args.z_parameter == 'z':
            z = param_value
        elif self.args.z_parameter == 'axis-angle-x':
            axis.x_angle = param_value
        elif self.args.z_parameter == 'axis-angle-y':
            axis.y_angle = param_value
        elif self.args.z_parameter == 'axis-angle-z':
            axis.z_angle = param_value
        elif self.args.z_parameter == 'volume-angle-x':
            volume_angle.x_angle = param_value
        elif self.args.z_parameter == 'volume-angle-y':
            volume_angle.y_angle = param_value
        elif self.args.z_parameter == 'volume-angle-z':
            volume_angle.z_angle = param_value
        elif self.args.z_parameter == 'detector-angle-x':
            detector.x_angle = param_value
        elif self.args.z_parameter == 'detector-angle-y':
            detector.y_angle = param_value
        elif self.args.z_parameter == 'detector-angle-z':
            detector.z_angle = param_value
        elif self.args.z_parameter == 'detector-position-x':
            detector.position[0] = param_value
        elif self.args.z_parameter == 'detector-position-y':
            detector.position[1] = param_value
        elif self.args.z_parameter == 'detector-position-z':
            detector.position[2] = param_value
        elif self.args.z_parameter == 'source-position-x':
            source_position[0] = param_value
        elif self.args.z_parameter == 'source-position-y':
            source_position[1] = param_value
        elif self.args.z_parameter == 'source-position-z':
            source_position[2] = param_value
        elif self.args.z_parameter == 'center-position-x':
            axis.position[0] = param_value
        elif self.args.z_parameter == 'center-position-z':
            axis.position[2] = param_value
        else:
            raise RuntimeError("Unknown z parameter '{}'".format(
                self.args.z_parameter))

        points = get_extrema(self.args.x_region, self.args.y_region, z)
        if self.args.z_parameter != 'z':
            points_upper = get_extrema(self.args.x_region, self.args.y_region,
                                       z + 1)
            points = np.hstack((points, points_upper))
        tomo_angle = float(index) / self.args.number * self.args.overall_angle
        xe, ye = compute_detector_pixels(points, source_position, axis,
                                         volume_angle, detector, tomo_angle)
        return compute_detector_region(xe,
                                       ye, (self.args.height, self.args.width),
                                       overhead=self.args.projection_margin)