agentjs-core
Version:
A comprehensive agent-based modeling framework with built-in p5.js visualization
159 lines • 4.46 kB
TypeScript
/**
* ContinuousSpace - Continuous 2D spatial environment implementation
*/
import { Environment, SpatialQueryResult } from './Environment';
import type { Agent } from '../agents/Agent';
import type { Position } from '../../types/core';
import type { ContinuousSpaceConfig, NeighborQueryOptions, DistanceFunction } from '../../types/spatial';
/**
* ContinuousSpace - 2D environment with floating-point coordinates
*
* Features:
* - Floating-point position precision
* - Spatial indexing with quadtree for performance
* - Efficient neighbor queries within radius
* - Multiple distance calculation methods
* - Boundary condition handling
*
* Educational Context: Represents physical spaces where
* community members can move freely with precise positioning,
* such as geographic areas, meeting spaces, or virtual worlds.
*/
export declare class ContinuousSpace extends Environment {
/** Spatial configuration */
private readonly config;
/** Quadtree root for spatial indexing */
private quadtree;
/** Distance calculation function */
private distanceFunction;
constructor(configOrWidth: ContinuousSpaceConfig | number, height?: number);
/**
* Find agents within radius of position
*/
findNeighbors(position: Position, radius: number, options?: NeighborQueryOptions): SpatialQueryResult<Agent>;
/**
* Get agents at specific position (within small tolerance)
*/
getAgentsAt(position: Position): ReadonlyArray<Agent>;
/**
* Set custom distance function
*/
setDistanceFunction(fn: DistanceFunction): void;
/**
* Get Manhattan distance function
*/
static getManhattanDistance(): DistanceFunction;
/**
* Get Euclidean distance function (default)
*/
static getEuclideanDistance(): DistanceFunction;
/**
* Get Chebyshev distance function (max of x,y differences)
*/
static getChebyshevDistance(): DistanceFunction;
/**
* Get current configuration
*/
getConfig(): ContinuousSpaceConfig;
/**
* Update spatial configuration
*/
updateConfig(newConfig: Partial<ContinuousSpaceConfig>): void;
/**
* Get quadtree statistics
*/
getQuadtreeStats(): {
nodeCount: number;
maxDepth: number;
agentCount: number;
};
/**
* Force rebuild of spatial index
*/
rebuildQuadtree(): void;
/**
* Check if quadtree needs rebalancing
*/
needsRebalancing(): boolean;
/**
* Rebalance quadtree for optimal performance
*/
rebalanceQuadtree(): void;
/**
* Sort agents by Morton code (Z-order) for better spatial locality
*/
private sortByMortonCode;
/**
* Calculate Morton code (Z-order) for a position
*/
private calculateMortonCode;
/**
* Merge quadtree nodes if they're underutilized
*/
private tryMergeNode;
/**
* Optimize quadtree by merging underutilized nodes
*/
optimizeQuadtree(): void;
/**
* Recursively optimize quadtree nodes
*/
private optimizeNode;
/**
* Hook: Handle agent addition
*/
protected onAgentAdded(agent: Agent, position: Position): void;
/**
* Hook: Handle agent removal
*/
protected onAgentRemoved(agent: Agent): void;
/**
* Hook: Handle agent movement
*/
protected onAgentMoved(agent: Agent, _oldPosition: Position, newPosition: Position): void;
/**
* Initialize quadtree structure
*/
private initializeQuadtree;
/**
* Insert agent into quadtree
*/
private insertIntoQuadtree;
/**
* Remove agent from quadtree
*/
private removeFromQuadtree;
/**
* Insert agent into specific quadtree node
*/
private insertIntoNode;
/**
* Remove agent from quadtree node
*/
private removeFromNode;
/**
* Split quadtree node into four children
*/
private splitNode;
/**
* Query quadtree for agents within radius
*/
private queryQuadtree;
/**
* Query specific quadtree node
*/
private queryNode;
/**
* Check if point is within bounds
*/
private pointInBounds;
/**
* Check if circle intersects with bounds
*/
private circleIntersectsBounds;
/**
* Calculate quadtree statistics
*/
private calculateQuadtreeStats;
}
//# sourceMappingURL=ContinuousSpace.d.ts.map