All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.unibo.alchemist.model.cognitive.properties.Perceptive2D.kt Maven / Gradle / Ivy

There is a newer version: 35.0.0
Show newest version
/*
 * Copyright (C) 2010-2023, Danilo Pianini and contributors
 * listed, for each module, in the respective subproject's build.gradle.kts file.
 *
 * This file is part of Alchemist, and is distributed under the terms of the
 * GNU General Public License, with a linking exception,
 * as described in the file LICENSE in the Alchemist distribution's top directory.
 */

package it.unibo.alchemist.model.cognitive.properties

import it.unibo.alchemist.model.Node
import it.unibo.alchemist.model.cognitive.PerceptiveProperty
import it.unibo.alchemist.model.physics.FieldOfView2D
import it.unibo.alchemist.model.physics.InfluenceSphere2D
import it.unibo.alchemist.model.physics.environments.Physics2DEnvironment

/**
 * Base implementation of a pedestrian's capability to influence each other in a 2D space.
 */
class Perceptive2D @JvmOverloads constructor(
    /**
     * The environment where [node] is moving.
     */
    val environment: Physics2DEnvironment,
    override val node: Node,
    override val fieldOfView: InfluenceSphere2D =
        FieldOfView2D(environment, node, defaultFieldOfViewDepth, defaultFieldOfViewAperture),
) : PerceptiveProperty by Perceptive(
    node,
    fieldOfView,
) {
    override fun cloneOnNewNode(node: Node) = Perceptive2D(
        environment,
        node,
        FieldOfView2D(environment, node, defaultFieldOfViewDepth, defaultFieldOfViewAperture),
    )

    companion object {
        /**
         * Default aperture of pedestrian's [fieldOfView].
         */
        const val defaultFieldOfViewAperture = Math.PI / 180 * 80

        /**
         * Default depth of pedestrian's [fieldOfView].
         */
        const val defaultFieldOfViewDepth = 10.0
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy