algorithmus für berechnung von überlappenden vektoren gesucht

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • algorithmus für berechnung von überlappenden vektoren gesucht

    moin leute,

    ich versuch gerad einen algorithmus zu programmieren der mir sagt wie viele parrallele überlappende vektoren ich in einem raum hab. (das ist die kurzfassung...)

    also detalliert:

    ich möchte eine event application entwickeln. um die events an den einzelnen tagen (visuell) korrekt darzustellen muss ich nun berechnen
    wie viele "termine/events" sich an einem tag überschneiden.

    kleines beispiel:
    de.tinypic.com/r/2yv8fx0/4
    [Blockierte Grafik: http://de.tinypic.com/r/2yv8fx0/4]

    das ganze ist ein bisschen komplex und ich bin leider nicht der beste problemlöser... ich hab das ganze auch bis zu einem gewissen grad hinbekommen, aber
    ich bin da nicht mit zufrieden. und es tauchen fehler auf...

    das ganze hab ich mal in javascript geschrieben. aber mir gehts hier mehr um die logik. also wenn dazu jemand was in einer anderen sprache sagen kann wäre das auch cool...
    das ganze ist ein ansatz der einigermaßen funzt. bin aber offen für ne komplett andere richtnug :)

    Quellcode

    1. /**
    2. * Redraw each column
    3. * @method redrawevents
    4. * @param {array} calumn_sort sorted events on one day. events sorted on start date
    5. * @param {Int} index cwday of the calendar (mo=1, di=2, ...)
    6. * @private
    7. */
    8. function redrawevents(calumn_sort, index){
    9. var finished = [];
    10. var eventsBefore = [ ];
    11. var events = [ ];
    12. var next_pos = 0;
    13. var result = [];
    14. var index = index;
    15. var group = 0;
    16. while(calumn_sort.length > 0) {
    17. // extract the first element of the array.
    18. var current = calumn_sort.shift();
    19. var pos = -1;
    20. eventsBefore.each(function(event, index){
    21. // check if the event dont overlp with current event.
    22. // if they do replace the event with the current event and BREAK
    23. if( event.dim <= current.top_pos ) {
    24. pos = index;
    25. eventsBefore[index] = current;
    26. throw $break;
    27. }
    28. });
    29. // the first event which did Not overlapped with the current element
    30. if(pos === -1){
    31. pos = next_pos;
    32. next_pos += 1;
    33. eventsBefore.push(current);
    34. }
    35. current.drawing_pos = pos;
    36. current.drawing_size = next_pos;
    37. finished.push(current);
    38. }
    39. finished.each(function(event, i){
    40. event.group = group;
    41. event.drawing_size = next_pos;
    42. result.push(event);
    43. });
    Alles anzeigen
    Bilder
    • Picture 11.png

      7,92 kB, 199×260, 202 mal angesehen
  • Hi fluxsaas,

    wo genau ist das Problem bei deinem Algorithmus?
    Wo hältst du denn die Bedingen fest? Ich ververstehe deinen Vergleich nicht: event.dim <= current.top_pos

    Damit es keine Überschneidung im zweidimensionalen gibt, muss das aktuelle Element also entweder komplett davor liegen...

    Quellcode

    1. x.end < current.start AND x.end < AND current.end


    oder komplatt danach statt finden

    Quellcode

    1. x.start > current.start AND x.start > current.end