/    Sign up×
Community /Pin to ProfileBookmark

Reynolds’ Boids algorithm

Hi,

I am attempting to use HTML 5 and JavaScript to display a simulation of Reynolds’ Boids algorithm on a webpage.

The algorithm simulates the flocking behaviour of birds while they’re in flight.

I have tried writing the webpage, using a canvas to display the simulation, but for some reason, when I view the page in a web browser, I just get a blank canvas, and no simulation is displayed.

I was wondering if someone could point me in the right direction?

The HTML and JavaScript I have written is below:

[CODE]<!DOCTYPE html>
<html>

<head>
<title>Boids Flocking Simulation</title>
</head>

<body>
<h1>Boyds Flocking Algorithm example</h1>
<p>The simulation below shows a simple example of Craig Reynolds’ Boids algorithm which simulates
the flocking behaviour of brids.</p>

<canvas id=”BoidsCanvas” width=”700″ height=”300″ style=”border:1px dotted” onClick=”stop_game()”></canvas>

<script>
var minVelocity : float = 5;
var maxVelocity : float = 20;
var randomness : float = 1;
var flockSize : int = 20;
var prefab : GameObject;
var chasee : GameObject;

var flockCenter : Vector3;
var flockVelocity : Vector3;

private var boids;

function Start() {
boids = new Array(flockSize);
for (var i=0; i<flockSize; i++) {
var position = Vector3(
Random.value*collider.bounds.size.x,
Random.value*collider.bounds.size.y,
Random.value*collider.bounds.size.z
) – collider.bounds.extents;

var boid = Instantiate(prefab, transform.position, transform.rotation);
boid.transform.parent = transform;
boid.transform.localPosition = position;
boid.GetComponent(“Boid Flocking”).setController(gameObject);
boids[i] = boid;
}
}

function Update () {
var theCenter = Vector3.zero;
var theVelocity = Vector3.zero;

for (var boid : GameObject in boids) {
theCenter = theCenter + boid.transform.localPosition;
theVelocity = theVelocity + boid.rigidbody.velocity;
}

flockCenter = theCenter/(flockSize);
flockVelocity = theVelocity/(flockSize);
}
var Controller : GameObject;

private var inited = false;
private var minVelocity : float;
private var maxVelocity : float;
private var randomness : float;
private var chasee : GameObject;

function Start () {
StartCoroutine(“boidSteering”);
}

function boidSteering () {
while(true) {
if (inited) {
rigidbody.velocity = rigidbody.velocity + calc() * Time.deltaTime;

// enforce minimum and maximum speeds for the boids
var speed = rigidbody.velocity.magnitude;
if (speed > maxVelocity) {
rigidbody.velocity = rigidbody.velocity.normalized * maxVelocity;
} else if (speed < minVelocity) {
rigidbody.velocity = rigidbody.velocity.normalized * minVelocity;
}
}
waitTime = Random.Range(0.3, 0.5);
yield WaitForSeconds(waitTime);
}
}

function calc () {
var randomize = Vector3((Random.value *2) -1, (Random.value * 2) -1, (Random.value * 2) -1);

randomize.Normalize();

flockCenter = Controller.GetComponent(“Boid Controller”).flockCenter;
flockVelocity = Controller.GetComponent(“Boid Controller”).flockVelocity;
follow = chasee.transform.localPosition;

flockCenter = flockCenter – transform.localPosition;
flockVelocity = flockVelocity – rigidbody.velocity;
follow = follow – transform.localPosition;

return (flockCenter + flockVelocity + follow*2 + randomize*randomness);
}

function setController (theController : GameObject) {
Controller = theController;
minVelocity = Controller.GetComponent(“Boid Controller”).minVelocity;
maxVelocity = Controller.GetComponent(“Boid Controller”).maxVelocity;
randomness = Controller.GetComponent(“Boid Controller”).randomness;
chasee = Controller.GetComponent(“Boid Controller”).chasee;
inited = true;
}
var boidController : Transform;

function LateUpdate () {
if (boidController) {
var watchPoint : Vector3 = boidController.GetComponent(“Boid Controller”).flockCenter;
transform.LookAt(watchPoint+boidController.transform.position);
}
}
</script>

</body>

</html>
[/CODE]

Thanks!

to post a comment
JavaScript

3 Comments(s)

Copy linkTweet thisAlerts:
@Declan1991Apr 03.2012 — Firstly, use the Error Console in Firefox, or Firebug extension for Firefox, or the equivalents in any other browser.

Secondly, learn JavaScript syntax, as I have no idea where "var minVelocity : float = 5;" came from! For example, JavaScript variable declarations looks like:var minVelocity = 5;In fact, most of the code is not JavaScript at all.
Copy linkTweet thisAlerts:
@Gray1989Apr 03.2012 — Yes, JavaScript has dynamic variables that don't and will never need type declarations! Because JS is an uncompiled language it knows what type the variable is automatically depending on how it is used at any given point in time. The compiler does all of the work for you in realtime.
Copy linkTweet thisAlerts:
@Gray1989Apr 03.2012 — For example, this returns 2

[CODE]var string = "100x200";
var string1 = string.split("x")[0];
var string2 = string.split("x")[1];
alert(string2/string1);[/CODE]


and this returns NAN

[CODE]var string = "1oox2oo";
var string1 = string.split("x")[0];
var string2 = string.split("x")[1];
alert(string2/string1);[/CODE]


None return errors
×

Success!

Help @someone2088 spread the word by sharing this article on Twitter...

Tweet This
Sign in
Forgot password?
Sign in with TwitchSign in with GithubCreate Account
about: ({
version: 0.1.9 BETA 6.18,
whats_new: community page,
up_next: more Davinci•003 tasks,
coming_soon: events calendar,
social: @webDeveloperHQ
});

legal: ({
terms: of use,
privacy: policy
});
changelog: (
version: 0.1.9,
notes: added community page

version: 0.1.8,
notes: added Davinci•003

version: 0.1.7,
notes: upvote answers to bounties

version: 0.1.6,
notes: article editor refresh
)...
recent_tips: (
tipper: @nearjob,
tipped: article
amount: 1000 SATS,

tipper: @meenaratha,
tipped: article
amount: 1000 SATS,

tipper: @meenaratha,
tipped: article
amount: 1000 SATS,
)...