Ich habe ein paar Linien mit Punkten in einem Diagramm gezeichnet, die wie die in dem Bild unten aussehen: sagen wir zum Beispiel, dass ich die Koordinaten für Punkte A & B habe, die ich verwende setze die Linie. Ich möchte, dass die Linie von x = 0 nach x = 100 geht und die beiden fehlenden "x" Stücke hinzugefügt werden. Ich verwende d3.svg.line()
, um die .x
und .y
Accessor-Funktionen und dann einen Pfad zum Plotten der Linie. Gibt es eine Funktion, die der Zeile oder dem Pfadgenerator hinzugefügt wird, die das tut, was ich erhalten möchte? Jeder Hinweis ist dankbar, danke!Linie mit gegebenen Punkten verlängern
5
A
Antwort
8
Es gibt keine eingebaute Möglichkeit, es zu tun, aber es ist nicht zu schwer, sich selbst zu berechnen.
Lassen Sie uns sagen, Sie sind zur Zeit die Grenze zwischen A
und B
wie diese Zeichnung:
var A = [15, 40], // x of 15 and y of 40
B = [85, 90],
line = d3.svg.line();
path.attr('d', line([A,B]))
Sie benötigen p0
und p1
bei x von 0 und 100 zu berechnen, unter Berücksichtigung der Neigung der Linie und ein Punkt, den die Linie durchläuft. Sie benötigen also eine Funktion pointAtX()
, die als Parameter A
und B
und eine gewünschte x-Koordinate übernimmt und die entsprechende y-Koordinate zurückgibt.
function pointAtX(a, b, x) {
var slope = (b[1] - a[1])/(b[0] - a[0])
var y = a[1] + (x - a[0]) * slope
return [x, y]
}
Dann können Sie die Zeile wie folgt zeichnen:
var A = [15, 40], // x of 15 and y of 40
B = [85, 90],
line = d3.svg.line(),
p0 = pointAtX(A, B, 0),
p1 = pointAtX(A, B, 100),
path.attr('d', line([p0,p1]))
Interessanterweise kann die Umsetzung von pointAtX()
neu geschrieben werden Verwendung von d3.scale.linear
zu machen. Nicht sicher ist es besser, aber irgendwie cool:
var interpolator = d3.scale.linear()
function pointAtX(a, b, x) {
interpolator
.domain([a[0], b[0]])
.range([a[1], b[1]]);
return [x, interpolator(x)];
}
Verwandte Themen
- 1. Finden von Punkten auf einer Linie mit einer gegebenen Entfernung
- 2. Wie kann ich mit Core Plot eine Linie von zwei Punkten zu den Rändern des Diagrammbereichs verlängern?
- 3. Wie zeichne Linie auf Kartenansicht gegebenen Koordinaten?
- 4. Zeichnen einer Linie zwischen zwei Punkten
- 5. Createjs und easlejs - animiere eine Linie mit mehreren Punkten
- 6. Konturapproximation mit unerwünschten Punkten
- 7. Wie finde ich die Steigung einer geraden Linie zwischen 2 gegebenen Punkten von Breite + Länge in JAVA/Android?
- 8. R: eine Linie zwischen zwei Punkten in ggplot zeichnet
- 9. senkrechte Linie zu zwei Punkten in Pixelkoordinaten zeichnen?
- 10. Leaflet.js zeichnen Linie entlang der Flüsse zwischen zwei Punkten
- 11. Zeichnen Sie die Linie zwischen zwei verschiedenen Punkten
- 12. Aws-Integrationsfeder: Sichtbarkeitszeitlimit verlängern
- 13. Verlängern Animationsdauer - CSS3
- 14. base.extend vs. base.class_eval verlängern
- 15. verlängern base.html Problem
- 16. Berechnung eines exakten Splines mit 3 gegebenen Punkten in 2D. C++
- 17. Erhalte alle Pixelkoordinaten zwischen 2 Punkten
- 18. JQuery verlängern Funktion in Ember.js
- 19. JFreeChart mit markierten Punkten
- 20. Zeichnen Sie eine Linie zwischen zwei Punkten auf einer Google Map mit jQuery?
- 21. Heatmap mit Punkten an bestimmten Koordinaten
- 22. Algorithmus, um alle konvexen Vierecke aus der gegebenen Liste von 2d Punkten zu finden
- 23. lesen Textdatei mit gegebenen Informationen
- 24. Wie mit sehr wenigen Punkten in R
- 25. Wie verlängern Sie die Lebenslinie des Sequenzdiagramms in Dia?
- 26. 3 dimensionale B-Spline-Kontrollpunkte aus einem gegebenen Array von Punkten aus der Spline-Lösung gefunden?
- 27. Away3d Wie rende ich eine Fläche von einem gegebenen Array von 3D-Punkten?
- 28. raster Pufferung mit Werten in einem gegebenen Zustand in R
- 29. Draw angepasste Linie (OpenCV)
- 30. C# Zeichnungsbogen mit 3 Punkten
+1 für die lineare Skala Idee. IMHO, so würdest du es machen wollen. –
@LarsKotthoff Eine nette Sache über den Maßstab Ansatz ist, dass es mit anderen Arten von Skalen arbeiten kann, so dass die resultierende Kurve immer durch die Punkte A und B passiert. Http://jsfiddle.net/meetamit/Lg7Md/1/ – meetamit