PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktionen auswerten und mit Koordinaten rechnen



hypocrissy
03-08-2010, 17:59
Hallo,
ich würde gerne eine Funktion f definieren und mit ihr nodes definieren, in etwa so
\pnode(x,f(x)){P1}.
Dann würde ich gerne mit der Ableitung f '(x) arbeiten. In der pstricks-add Anleitung habe ich Derive entdeckt, weiß aber nicht ob/wie man das ausserhalb von \psplot verwendet.
Eine Anwendung wäre:
\pnode(f '(x),f(x)){P2}
Nun möchte ich noch auf Koordinaten von nodes zu greifen:
Wenn P1=(P1.x,P1.y), hätte ich gerne
\pnode(P1.x+f(x),P1.y){P3}
Zu guter letzt würde ich gern den euklidischen Abstand zweier nodes/Punkte berechnen.
Auch hier habe ich den Befehl \psGetDistance in pstricks-add gefunden, der funktioniert aber nicht so wie erwartet:
\psGetDistance(0,0)(1,0)\Dval\Dval liefert 0.1715.
\psGetDistance(0,0)(1,1)\Dval\Dval liefert hingegen 0.34303
Der Abstand wird doppelt so groß, sollte sich aber eigentlich um den Faktor sqrt(2) unterscheiden.
Ich wäre sehr froh, wenn ihr in dem Minimalbeispiel diese Lücken schließen könntet:


\documentclass[12pt,ngerman]{article}
\usepackage{pstricks}
\usepackage{pst-eucl}
\usepackage{pstricks-add,babel}
\pagestyle{empty}
\begin{document}
\begin{pspicture}(-4,-4)(4,4)
%definition der funktion f(x)= sin(x)+1
%\pnode(x,f(x)){P1}.
%\pnode(f '(x),f(x)){P2}
%\pnode(P1.x+f(x),P1.y){P3}
%\pnode(abstand(P1,P2),0){P4}
\end{pspicture}
\end{document}

Vielen Dank für eure Hilfe

voss
03-08-2010, 18:17
ich würde gerne eine Funktion f definieren und mit ihr nodes definieren, in etwa so
\pnode(x,f(x)){P1}.


in der Weise geht es nicht, du musst mindestens die ABleitung
per Hand bestimmen, aber das meiste kann man automatisieren.


\documentclass[12pt,ngerman]{article}
\usepackage{pstricks-add}
\pagestyle{empty}
\begin{document}

\begin{pspicture}[showgrid](-4,-4)(4,4)
%definition der funktion f(x)= sin(x)+1
\pnode(*1.57 {sin(x)+1}){P1}.
\pnode(*{1.57 RadtoDeg cos} {sin(x)+1}){P2}
\pnode(!\psGetNodeCenter{P1}
P1.x 1.57 RadtoDeg sin 1 add add P1.y){P3}
\pnode(!\psGetNodeCenter{P1}
\psGetNodeCenter{P2}
P1.x P2.x sub dup mul P1.y P2.y sub dup mul add sqrt 0){P4}
\multido{\iA=1+1}{4}{\qdisk(P\iA){2pt}\uput[-90](P\iA){P\iA}}
\end{pspicture}

\end{document}

Herbert

hypocrissy
03-08-2010, 19:27
Vielen Dank für die schnelle und hilfreiche Antwort.
Verstehe ich es richtig dass man nach bzw. durch \psGetNodeCenter{P1}
durch P1.x und P1.y auf die Koordinaten zugreifen kann?
Wie bestimmt Latex in der Zeile

\pnode(*1.57 {sin(x)+1}){P1}.
das x?
Ich nehme an, dass x=1.57, aber nach welchen Regeln geschieht das?
Ist der Stern dafür verantwortlich? Mir reicht auch schon der Verweis auf eine entsprechende Dokumentation. Ich konnte leider keine hilfreiche finden.
Zur Funktion f(x)= sin(x)+1: Die Funktion die ich verwende ist komplizierter und ich habe sie bisher jedesmal erneut eingegeben. Ich hatte gehofft, dies ließe sich automatisieren, aber wenn nicht ist auch nicht schlimm.
Dankeschön nochmal
Christian

voss
03-08-2010, 19:54
V
Verstehe ich es richtig dass man nach bzw. durch \psGetNodeCenter{P1}
durch P1.x und P1.y auf die Koordinaten zugreifen kann?

ja


Wie bestimmt Latex in der Zeile

\pnode(*1.57 {sin(x)+1}){P1}.
das x?
Ich nehme an, dass x=1.57, aber nach welchen Regeln geschieht das?
Ist der Stern dafür verantwortlich? Mir reicht auch schon der Verweis auf eine entsprechende Dokumentation. Ich konnte leider keine hilfreiche finden.

Der Stern bedeutet, dass das erste der x-Wert ist, der auf die
folgende Funktion angewendet wird. Wenn man die Funktion in
PostScript-Notation ausdrücken kann, wird das Ganze ziemlich
einfach. Hier wäre es

\def\Func{ RadtoDeg sin 1 add\space }% x-Wert muss auf dem Stack liegen



Zur Funktion f(x)= sin(x)+1: Die Funktion die ich verwende ist komplizierter und ich habe sie bisher jedesmal erneut eingegeben. Ich hatte gehofft, dies ließe sich automatisieren, aber wenn nicht ist auch nicht schlimm.


Dann kannst du die Koordinaten alle in PostScript-Notation angeben,
hier mal für P3 gezeigt:


\pnode(!\psGetNodeCenter{P1}
P1.x 1.57 \Func add P1.y){P3}

So weit klar? Das !-Zeichen steht für "Jetzt kommt PostScript"

Herbert

hypocrissy
03-08-2010, 21:08
Herbert Voss, Sie sind ein Engel!
Ich habe jetzt auch einen Weg gefunden Funktion flexibler auszuwerten:
Man definiert sich zunächst eine Funktion:

\def\Func{ myVar RadtoDeg sin }
Benötigt man nun die Koordinaten (2,f(2)) so setzt man

\pstVerb{/myVar 2 def}
\pnode(! myVar \Func)
Vorteil: Die Variable kann an verschiedensten stellen in der Funktion auftauchen
und man kann auch in der ersten Koordinate eine Funktion stehen haben.

Goldnas
28-10-2011, 14:14
Ich stehe vor einem anderen Problem.

Ziel:

\pnode(3,4){AA}
...
...
...

\psline(AA)(AB)
\pscircle()()..
\psframe...

und diesen Satz an Koordinaten würde ich gerh über multiput in x 2 mal um einen negativen Wert verschieben.

Es geht selbstverständlich, wenn ich die Koordinaten in den pline Befehlen als Zahlen eintrage, nicht jedoch, wenn ich die Koordinaten bezeichne.

also

während also:



\multiput(0 , 0)(-3 , 0){2}{\psline[linecolor=black,fillstyle=solid,linewidth=0.45pt,p lotstyle=line](5.35,1.16)(5.65,1.4)(5.75,1.4)(5.45,1.16)(5.35,1. 16)}


problemlos funktioniert, kann er mit



\multiput(0 , 0)(-3 , 0){2}{\psline[linecolor=lightgrey,fillstyle=slope,slopebegin=lig htgrey,slopeend=lightgrey3,linewidth=0.45pt,plotst yle=line](HA)(HB)(HC)(HD)(HE)(HF)(HG)(HH)(HA)}


Nichts anfangen.

Ziel ist in dem Fall eben, dass er auf die X-Koordinaten von HA, HB, HC ...zugreift und diese um 3 vermindert....

Ich glaube ja, das es mit diesem Ansatz von oben funktionieren müßte, ich steig nur nicht dahinter...

LG Goldnas