ich auf einer Änderung vis.js der Graph3d gerade arbeite ein gefülltes Liniendiagramm zu tun, wie folgt aus:Suche ‚view‘ Koordinaten in vis.js
Der schwierige Teil - wenig überraschend - erstellt die Renderreihenfolge für die Polygone. Ich glaube, ich kann dies tun, indem geprüft wird, ob ein Strahl vom Betrachter auf eine bestimmte Linie B Linie A kreuzt:
In diesem Beispiel, da die Linie A „in der Art und Weise“ der Linie B ist, wir sollte zuerst Linie A zeichnen. Ich werde ein Codeschnipsel von How do you detect where two line segments intersect? verwenden, um zu überprüfen, ob die Zeilen kreuzen.
Ich habe jedoch nicht herausgefunden, wie die Position der Benutzeransicht zu finden ist. Ich nahm Art würde dies das Kameraobjekt sein, so ein wenig von Debug-Code geschrieben, die Kamera auf dem Graphen zu zeichnen:
var camera = this._convert3Dto2D(this.camera.getCameraLocation());
ctx.strokeStyle = Math.random()>0.5 ? 'ff0000' : '00ff00';
ctx.beginPath();
ctx.moveTo(camera.x, camera.y);
ctx.lineTo(camera.x, camera.y+5);
ctx.stroke();
In der Tat, wie die Kamera-Koordinaten durch diesen gemessen werden immer bei 0 , 0,0 auf dem Graphen (das wäre ganz oben rechts auf dem obigen Screengrab). Was ich brauche, denke ich, ist effektiv der untere Teil des Bildschirms.
Wie kann ich das finden? Oder gibt es einen besseren Weg, um das zu erreichen, was ich versuche?
Vielen Dank! Am Ende habe ich wegen dieses Problems eher three.js für das Diagramm als vis.js verwendet, aber hoffentlich wird es für jemand anderen nützlich sein. (Wenn Sie interessiert sind, können Sie das fertige Diagramm unter http://cycle.travel/map sehen; planen Sie eine Route, klicken Sie auf das Höhen-Symbol und dann auf "3D".) –
Kein Problem! Ich bin froh, dass du etwas gefunden hast, das für dich funktioniert. Ich denke, dieser Graphentyp ist eine coole Idee; Es ist auf meinem TODO ab sofort. –