Ich zeichne ein Diagramm mit 2000+ Punkten zu einer PDF-Datei. Die Auflösung der pdf ist 612 x 792. Ich kann nur 612 Punkte zum pdf zeichnen, weil die Breite 612 ist. Ich mappe 1 Punkt auf 1 Pixel. Wie kann ich alle 2000 + Samples auf das PDF plotten? Ich benutze diese Lib http://www.vulcanware.com/cpp_pdf/index.html.Zeige mehr Punkte als Auflösung
Antwort
Option 1: Skalieren Sie die Punkte mit x = (x * 612)/2000
. Dies bedeutet, dass wenn zwei Punkte nahe beieinander liegen (einschließlich "ähnlichem y"), sie sich gegenseitig überschreiben.
Option 2: Behandeln Sie jeden Punkt als ein Quadrat; und Berechnen von Gleitkommawerten für die "linke Kante x" und "rechte Kante x", die skaliert wurden (left_x = ((x-width/2.0) * 612.0)/2000.0; right_x = ((x+width/2.0) * 612.0)/2000.0;
), und Zeichnen des Quadrates unter Verwendung von Anti-Aliasing durch Berechnen der "Fläche des Zielpixels, dass das Quadrat überlappt" für jedes Ziel Pixel, das mit dem Quadrat überlappt. In diesem Fall müssen Sie "dest_pixel = max (dest_pixel + area, 1);" um Pixelwerte zu klemmen, wenn sich Quadrate überlappen.
Option 3: Drehen Sie das Ganze um 90 Grad, so dass "x-Achse" vertikal auf der Seite nach unten geht (und ggf. über mehrere Seiten verteilt werden kann); und wenn dies ein Problem für y verursacht, dann benutze eine der obigen Optionen für y.
Beachten Sie, dass "Option 2" sowohl in vertikaler als auch in horizontaler Richtung gleichzeitig ausgeführt werden kann. Dazu starten, indem die Kanten des Quadrates Bestimmung wie:
left_x = point_x/MAX_SRC_X * MAX_DEST_X;
right_x = (point_x + 1)/MAX_SRC_X * MAX_DEST_X;
top_y = point_y/MAX_SRC_Y * MAX_DEST_Y;
bottom_y = (point_y + 1)/MAX_SRC_Y * MAX_DEST_Y;
Dann haben eine „für jede Zeile, die bewirkt wird,“ Schleife, die berechnet, wie viel jede Zeile durchgeführt wird, wie:
for(int y = top_y; y < bottom_y; y++) {
row_top = fmax(y, top_y);
row_bottom = fmin(y+1, bottom_y);
row_weight = row_bottom - row_top;
haben dann eine ähnliche „für jede Spalte, die bewirkt wird,“ Schleife, wie:
for(int x = left_x; x < right_x; x++) {
column_left = fmax(x, left_x);
column_right = fmin(x+1, right_x);
column_weight = column_right - column_left;
dann ist die Fläche für das pixel berechnen, um das pixel gesetzt, und füllen die Schleifen:
dest_pixel_area = row_weight * column_weight;
pixel[y][x].red = min(pixel[y][x].red + dest_pixel_area * red, MAX_RED);
pixel[y][x].green = min(pixel[y][x].green + dest_pixel_area * green, MAX_GREEN);
pixel[y][x].blue = min(pixel[y][x].blue + dest_pixel_area * blue, MAX_BLUE);
}
}
Hinweis: Der obige Code ist nicht getestet und vereinfacht. Es kann schneller sein, die Schleifen in "erste Zeile/Spalte; Schleife nur für mittleren Bereich; dann letzte Zeile/Spalte" zu zerlegen, um die meisten der fmin
/ zu entfernen.
Wenn Sie nur diese Richtung in einem tun, löschen Sie die Teile für die Richtung, die Sie brauchen, und verwenden Sie keine 1.0
für die entsprechende row_weight
oder column_weight
.
@ Brendan- Ich versuchte die erste Option, es ist in der Lage zu zeichnen alle Punkte, aber es verzerrt diese Handlung. Die Handlung ist nicht glatt. Ich bin nicht sicher, wie man Option 2 implementiert. – amanda45
@ amanda45: Ich habe ein paar Sachen hinzugefügt, die helfen könnten .. :-) – Brendan
- 1. signal.alarm-Funktion mit einer Auflösung von mehr als 1 Sekunde?
- 2. Zeige mehr Schaltfläche
- 3. auf Klick-Link (Mehr) Zeige mehr Tabellenfelddaten .. ??
- 4. Zeige mehr als ein String-Array in Android
- 5. django admin - Zeige alle für mehr als 200 Objekte
- 6. jquery fullcalendar plugin Zeige mehr als 1 Monat auf einmal
- 7. Zeige mehr als eine Liste mit for-Schleife in Java
- 8. Zeige Ausweisnummer nur wenn Zahl mehr als 0 ist
- 9. Implementierung "Zeige mehr" in ReactJs
- 10. Character Count - Zeige mehr Link
- 11. Zeige Mitarbeiter, die mehr verdienen
- 12. Zeige mehr Informationen in React
- 13. Paper.js fügen zwei Ecken mehr Punkte für mehr Höhe hinzu
- 14. Wie zeige ich mehr und zeige weniger Link, wenn die Textgröße mehr als das angegebene Pixel in angularjs ist?
- 15. Jquery Zeige mehr, zeige weniger Taste habe andere Gedanken
- 16. PHP - Zeige mehr von Benutzer mit mehr Prozent
- 17. Zeige mehr/weniger mit FAQ mit HTML
- 18. Zeige Verhältnis als Prozentsatz
- 19. Google Charts - zeige keine Punkte, wenn der Wert 0 ist
- 20. Zeige mehr in horizontalen ScrollView in android
- 21. Zeige mehr/weniger auf Elemente in angularjs
- 22. PHP - Zeige mehr Artikel feature feedback
- 23. Zeige mehr mit PHP-Schleife und Jquery
- 24. Erweiterbar UITableView mit "Zeige mehr" Taste
- 25. Zeige mehr signifikante Zahlen von Koeffizienten
- 26. Sortieren Vektoren um mehr Bedingungen als ein
- 27. Canvas-Inhalt als Bild mit hoher Auflösung.
- 28. Angular Ui-Router Auflösung Wert als Zeichenfolge
- 29. JavaScript: weniger als + mehr als
- 30. jtable bekomme mehr als 100 Zeilen
Mögliche Duplikate von [Pdf Auflösung Skalierung für das Plotten] (http://stackoverflow.com/questions/43301673/pdf-resolution-scaling-for-plotting) – chtz