PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kann man mit Inskcape auch Grafiken mathematisch beschreiben anstatt Zeichnen?


Gast
2010-01-19, 16:49:31
Folgende Frage.


Ich will einen Hausumriss Grafisch darstellen und brauche das Ergebnis als SVG Datei.

In Inkscape könnte ich ja jetzt mit der Maus den Hausumriss einzeichnen, aber das dauert länger als ihn einfach mathematisch zu beschreiben.
Nur wird aus der mathematischen Beschreibung noch lange keine Darstellung.
Kann ich in Inskcape also etwas mathematisch beschreiben anstatt einzuzeichnen?


PS:
Mir ist natürlich klar, daß man in SVG auch gleich direkt etwas grafisches beschreiben könnte, aber da müßte ich mich erstmal in die SVG Syntax einarbeiten und das dauert sicher länger als in einem Inuitiven Programm.

looking glass
2010-01-19, 17:10:06
Nun Du könntest gleich ein 2D CAD Programm nutzen (z.B. QCAD (dafür gibt es auch freie, deutsche Benutzerhandbücher), oder A9CAD - beides auch als Freeware erhältlich), das solche vorgehensweise inne hat, sofern das CAD Programm kein direkten SVG Output hat (beide oben genannten können das nicht), könntest mit einem Converter wie Easy CAD to SVG Converter dann umwandeln (der ist auch Freeware).

HeldImZelt
2010-01-19, 17:14:04
mathematisch zu beschreiben.
Gib mal'n Beispiel, wie du dir das vorstellst.

Pinoccio
2010-01-19, 17:16:30
Direkt SVG geht vermutlich ganz gut, wenn du einfach nur Geraden möchtest.
Ansonsten kannst du mit Inkscape auch mit "Erweiteurngen -> Rendern -> Funktionsplotter" Sachen "mathematisch" beschreiben.
Falls dir die Eckpunkte deines Umrisses schon als Datei vorliegen kannst du mit zahlreichen anderen Programmen auch ein SVG daraus erstellen, z. B. oder [url=http://www.mit.edu/~ibaran/kseg.html]KSEG (http://edu.kde.org/kig/KIG[/url) oder dir was eigenes schreiben.

Womit du am schnellsten bist, hängt natürlch von deinen Kenntnissen und den konkreten Dtaen ab.

mfg

looking glass
2010-01-19, 18:08:00
Gib mal'n Beispiel, wie du dir das vorstellst.


Naja, wer mal mit nem CAD Prog und der Komandozeile da umgegangen ist, möchte wohl sowas machen:

P1 setzen P2 125@0 (Strecke 125 bei 0°) P3 250@90 usw. (dabei ist der letzte Punkt immer Ausgangspunkt des nächsten), oder mit Koordinaten arbeiten, dabei setzt man z.B. in den ersten Punkt die 0,0 Koordinate und kann herrlich schnell arbeiten P2 wäre dann 125;0, P3 125;250.


Wen man so einfache Sachen macht und die Maße hat, arbeitet man eigentlich fast blind auf der Konsole, ging mir jedenfalls so, da wechselte man von einem Eingabemodi in den nächsten und zurück, rechnete bei Eingabe mal eben schnell im Kopf die nächsten Koordinaten aus usw..

Gast
2010-01-19, 20:09:24
Gib mal'n Beispiel, wie du dir das vorstellst.

Z.B.
Mach 10 Dreiecke jeweils um x Einheiten verschoben und um x Grad gedreht, wobei bei jedem durchgang x um 1 erhöht wird.

Gast
2010-01-19, 20:11:30
Z.B.
Mach 10 Dreiecke jeweils um x Einheiten verschoben und um x Grad gedreht, wobei bei jedem durchgang x um 1 erhöht wird.

Durchgang = hier jedes nächste Dreieck.


D.h. 10 mal x verändern und damit ein Dreieck zeichnen.

HeldImZelt
2010-01-19, 20:19:04
Geht alles mit Python:
http://wiki.inkscape.org/wiki/index.php/Generating_objects_from_extensions

Pinoccio
2010-01-19, 20:38:53
Durchgang = hier jedes nächste Dreieck.


D.h. 10 mal x verändern und damit ein Dreieck zeichnen.Klingt für mich so, als sich das problem mit einer Skriptsprache (o. ä.) udn einem Skruipt, das direkt SVG schreibt am günstigsten lösbar wäre.

JAVA:
public class somethingother {

static String path1 = "<path style=\"fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1\""
+ "\nd=\"m ";
static String path2 = "\"\nid=\"path";
static String path3 = "\" />";

public static void main(String[] args) {

System.out.println("<!-- to add in a existing SVG -->");
System.out.println(dreieckToSvgString(1, 10,10, 20,20, 10,20));

}

public static String dreieckToSvgString(int nmb, double x1, double y1, double x2, double y2, double x3, double y3) {

String seite1 = path1 + x1 + "," + y1 + " " + (x2 - x1) + "," + (y2 - y1) + path2 + nmb + "1" + path3 + "\n";
String seite2 = path1 + x2 + "," + y2 + " " + (x3 - x2) + "," + (y3 - y2) + path2 + nmb + "2" + path3 + "\n";
String seite3 = path1 + x3 + "," + y3 + " " + (x1 - x3) + "," + (y1 - y3) + path2 + nmb + "3" + path3 + "\n";

return seite1 + seite2 + seite3;
}

}

spuckt:
<!-- to add in a existing SVG -->
<path style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 10.0,10.0 10.0,10.0"
id="path11" />
<path style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 20.0,20.0 -10.0,0.0"
id="path12" />
<path style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 10.0,20.0 0.0,-10.0"
id="path13" />aus, was in ein leeres SVG (d.h. die Zeichnung ist leer, abwer der ganze Krams drumherum ist schon da) eingefügt ein kleines Dreieck zeichnet.

Es gitb natürlich auch Dreiecke als separate Elemente, da sind aber die Parameter etwas komplizierter.

/edit:
Geht alles mit Python:
http://wiki.inkscape.org/wiki/index.php/Generating_objects_from_extensionsOder so.

hth, mfg

Gast
2010-01-19, 20:58:14
Geht alles mit Python:
http://wiki.inkscape.org/wiki/index.php/Generating_objects_from_extensions


Danke, genau das was ich brauche.

Ich werde Python nehmen, denn das ist hier IMO geeigneter.

Aber eine Frage habe ich noch:
Gibt es bei SVG ein Koordinatensystem?
Denn wenn ich z.B. 3 Dreiecke auf einer Fläche verteilen will, dann sollten die ja im richtigen Bezugsverhältnis stehen, d.h. ich brauche zumindest dafür Koordinaten.

Pinoccio
2010-01-19, 21:04:42
Gibt es bei SVG ein Koordinatensystem?Ja, links oben ist 0,0, x nach rechts, y nach unten.

mfg

Gast
2010-01-19, 22:43:52
Ja, links oben ist 0,0, x nach rechts, y nach unten.

mfg

THX

Aber warum ist das eigentlich mathematisch falsch rum?

X ist ja richtig, aber wieso ist y nicht nach oben?

Pinoccio
2010-01-19, 22:47:33
THX

Aber warum ist das eigentlich mathematisch falsch rum?

X ist ja richtig, aber wieso ist y nicht nach oben?Das ist auf PC-Bildschirmen mindestens oft so, auch JAVAs AWT rechnet so. Hat wohl historische Gründe, da der Monitor von oben nach unten gefüllt wurde.
(Deshalb immer schön aufpassen beim Rotieren!)

mfg