Ich arbeite an einer TSP-Anwendung, die das Plotten verschiedener Punkte auf einer Karte beinhaltet. Ich brauche jede mögliche Kombination, um einmal und nur einmal gezeichnet zu werden. Der untenstehende Code ergibt für mich logisch Sinn, allerdings wird er nicht ein paar Mal umgangen, was viel, viel weniger ist, als es eigentlich sein sollte.Warum ist meine JavaScript-Funktion zum Plotten aller verschiedenen Kombinationen von verschiedenen Zahlen stoppen nach nur ein paar Läufe
var dogs = [];
var totalDogs = 9;
var prevComps = [];
var count = 0;
function setup() {
//Define the canvas
createCanvas(700, 575);
//Generate a random vector position for each dog
for (var i = 0; i < totalDogs ; i++){
var vectorPoints = createVector(random(width), random(height));
dogs[i] = vectorPoints;
}
}
function draw() {
//Sets the background to black and the circles (ellipses) to white
background(0);
fill(255);
for (var i = 0; i < dogs.length; i++){
ellipse(dogs[i].x, dogs[i].y, 8, 8);
}
//Defines the lines/paths
stroke(255);
strokeWeight(2);
noFill();
beginShape();
//Draw every dog on the map at their randomly generated vector point
for (var i = 0; i < dogs.length; i++){
vertex(dogs[i].x, dogs[i].y);
}
endShape();
//Creates two random numbers within the range of our array and swaps them
var i = floor(random(dogs.length));
var j = floor(random(dogs.length));
//Creates an array, stores the random numbers there to be compared and creates an "isNew" bool to determine if this pair has already been created
var comp = [];
comp.push(i);
comp.push(j);
var isNew = true;
//Checks to see if the new combo has been used before and thus stored in our previous comparison array
for(l = 0; l < prevComps.length; l++){
if(prevComps[l][0] == comp[0] && prevComp[l][1] == comp[1]){
isNew = false;
}
}
//If isNew is still true, the combination must be unique and so increase our count, add it to the prevComp array and finally swap the elements
if(isNew == true){
count++;
prevComps.push(comp);
//testing purposes
document.getElementById("demo").innerHTML = count;
swap(dogs, i, j)
}
}
//Simple swap function
function swap(a, i, j){
var tempVar = a[i]
a[i] = a[j];
a[j] = tempVar;
}
Ich hoffe, ich habe diesen Code in Ordnung kommentiert und es ist lesbar, wenn nicht, würde ich gerne alle Lücken ausfüllen. Vielen Dank im Voraus
Kannst du uns den Code zeigen, der eine Wende darstellt? Was ruft die Zeichenfunktion auf? Es kann auch sinnvoll sein, einige der Funktionen wie Ellipse, Scheitelpunkt usw. zu veröffentlichen. So können wir überprüfen, ob der Canvas-Zeichencode korrekt funktioniert. – agmcleod
es sieht aus wie 'Hunde' bleibt leer, ich kann nirgends sehen, wo du in' Hunde' drückst. In Schleifen ist die console.log nützlich, um zu verfolgen, was passiert – mjwatts
Ich bin eigentlich nicht ganz sicher, was die Ziehfunktion aufrufen, ich bin sehr neu in JS und dachte, dass es eigentümlich war, wie die Zeichenfunktion aufgerufen wurde obwohl es nirgendwo tatsächlich aufgerufen wurde. Dies ist nur eine JavaScript-Skriptdatei, die einfach auf einer ansonsten komplett leeren Indexseite verlinkt ist. Es verwendet die JavaScript-Bibliothek p5 für die Zeichenfunktionen, die Sie erwähnt haben. – jamezyx