Array Problem

sabato

Grünschnabel
Moin Leute,

ich versuche folgendes Problem zu lösen.

Ich brauche einen Array in dem 2 Koordinaten zu einem Objekt stehen.
Bsp:
- Objekt A
- x-coord= 150
- y-coord= 50
- ObjektB
- x-coord= 250
- y-coord= 70
usw.

Jetzt habe ich ein weiteres Objekt, dass man hin und her draggen kann. Wenn ich das Objekt loslasse soll es das Array fragen an welchen koordinaten es am nächsten ist und dann zu den koordinaten springen.

Das Drag and Drop habe ich. Das einrasten auch, allerdings nur mit einem Wert.
Was ich jetzt brauche ist ein passendes Array und eine Idee dazu, wie das Array durchsucht werden soll.

Kann mir da einer Helfen ?

Greetz

sabato

und danke im vorraus
 
...

Hallo,

Bei Struktur von Array sehe ich kein Problem.
Definiere folgende Funktion (praktisch Konstruktor....)

function myObject(name, x, y) {
this.name = name;
this.x = x;
this.y = y;
}

Füllen von Array geht dann folgendermaßen:
deinArray[0] = new myObject('Object1', 100, 200);
....


Um dann das Object, das am nächsten zu deinem liegt, zu bestimmen, muss Du für alle Objekte den Abstand berechnen. (Punkt-Punkt-Abstand = sqrt( (x1-x2)^2 + (y1 - y2)^2 ) ). Und dann halt das Objekt nehmen, wo dieser Abstand am kleinsten ist....Natürlich wird hier nicht berüchsichtigt, dass deine Objekte eigentlich Figure sind.

Wenn Du einen optimierten Algorithmus suchst, dann suche in einer Suchmaschine nach 'Problem des nächsten Nachbarn'


viele Grüße
firezz
 
yap hört sich gut an, so werde ich das machen, mit den Objects in den Array einlesen.

Danke, werde heute abend mal schauen, ob das so klappt.

Ach btw danke für den Suchmaschinen Tipp


Greetz
sabato
 
Moin,
kann mir evtl einer sagen warum er mir bei der Funktion check_my_array immer einen Fehler auswirft.
Ich verstehe nicht warum. für mich sieht das relativ richtig aus =)


Danke und Greetz
sabato

Code:
function myObject(name, x, y) {
  this.name = name;
  this.x = x;
  this.y = y;
}
object_array[0] = new myObject('Object1', 250, 70);
object_array[1] = new myObject('Object2', 250, 105);
object_array[2] = new myObject('Object3', 250, 140);

object_array[3] = new myObject('Object3', 70, 70);
object_array[4] = new myObject('Object3', 70, 105);
object_array[5] = new myObject('Object3', 70, 140);

function check_my_array(x,y)
{
  var temp_x = 0;
  var temp_y = 0;
  
  
  for (i=0; i<object_array.length(); i++)
  {
    if (x_x < temp_x && yy < temp_y)
    {
      var obj_x = object_array[i].x;
      var obj_y = object_array[i].y;
      var x_x = Math.abs(x - obj_x);
      var y_y = Math.abs(y - obj_y);
      if (x_x < 50 && y_y < 50)
      {
        temp_x = x_x;
        temp_y = y_y;
      }
    }
    
  }
  if (temp_x != 0 && temp_y != 0)
  {
    var check_array = new Array(2);
    check_array[check_array.length] = temp_x;
    check_array[check_array.length] = temp_y;
    alert (check_array);
  }
  else
  {
    return false;
  }
}
 
genau das war mein fehler, keine Ahung wie diese klammern da rein kamen =)

Aber wie gesagt alles wieder ok und klappt jetzt auch, wenn auch nboch etwas abgewandelt.

Danke trotzdem
sabato
 
Zurück