Skip to content

Potential Field Point Field

Eduardo Makita edited this page Mar 21, 2023 · 4 revisions

Campo Potencial de Ponto

Potential Field

Parâmetros:

Parâmetro Função
target Centro do campo potencial (x, y), pode ser uma função dinâmica, em metros.
decay Função matemática que determinará o decaimento da velocidade máxima até zero, deve ter domínio e imagem entre [0, 1].
radius Raio onde a função decay será aplicada, em metros.
radius_max Raio máximo onde o campo ira operar, pode ser nulo, se for nulo o campo funciona com força total em todo o jogo exceto dentro do radius, em metros.
multiplier Velocidade máxima desse comportamento, em m/s.
field_limits Aplica as dimensoes do campo, caso você deseje que a função não funcione fora do campo (por exemplo, dentro dos gols).

Campo de Ponto sem decaimento (PointField)

  • Comportamento na simulação

Potential Field

  • Visualização do Campo Potencial

Potential Field

  • Código

self.field.add_field(
    PointField(
        self.match,
        target = (0.75, 0.65),
        radius = 0.05, # 5 cm
        decay = lambda x: 1, # não há decaimento
        field_limits = [0.75*2 , 0.65*2],
        multiplier = 1.2 # 120 cm/s
    )
)

"""
lambda x: 1 é semelhante a
def func(x):
return 1
"""

Campo de Ponto usando função de decaimento (10cm radius, PointField)

  • Comportamento na simulação

Potential Field

  • Visualização do Campo Potencial

Potential Field

  • Código

    self.field.add_field(
        PointField(
            self.match,
            target = (0.75, 0.65),
            radius = 0.1, # 10 cm
            decay = lambda x: x**2, # decaimento exponencial
            field_limits = [0.75*2 , 0.65*2],
            multiplier = 0.5 # 50 cm/s
        )
    )
    """
    lambda x: x**2 é semelhante a
    def func(x):
    return x**2
    """

Campo de Ponto usando função de decaimento (30cm radius, PointField)

  • Compartamento na simulação

Potential Field

  • Visualização do Campo Potencial

Potential Field

  • Código

self.field.add_field(
    PointField(
        self.match,
        target = (0.75, 0.65),
        radius = 0.3, # 30 cm
        decay = lambda x: x**2, # decaimento exponencial
        field_limits = [0.75*2 , 0.65*2],
        multiplier = 0.5 # 50 cm/s
    )
)

Campo de Ponto usando função de decaimento (30cm radius, 50 cm radius_max, PointField)

  • Comportamento do Campo Potencial

    Potential Field

  • Código

self.field.add_field(
    PointField(
        self.match,
        target = (0.75, 0.65),
        radius = 0.3, # 30 cm
        radius = 0.5, # 50 cm
        decay = lambda x: x**2, # decaimento exponencial
        field_limits = [0.75*2 , 0.65*2],
        multiplier = 0.5 # 50 cm/s
    )
)

Campo de Ponto usando alvo móvel

  • Comportamento na simulação

    Potential Field

  • Código

self.field.add_field(
    PointField(
        self.match,
        target = lambda m: (m.ball.x, m.ball.y),
        radius = 0.3, # 30 cm
        decay = lambda x: x**2, # decaimento exponencial
        field_limits = [0.75*2 , 0.65*2],
        multiplier = 0.5 # 50 cm/s
    )
)
"""
No lambda do target, 'm' representa o objeto match.
"""
Clone this wiki locally