Discussion:
pstricks: Fläche zwischen zwei Bezier-Kurven schraffieren/füllen
(zu alt für eine Antwort)
Andreas Gick
2011-06-11 16:27:55 UTC
Permalink
'nabend allerseits,

das Minimalbeispiel zum meinem Problem sieht, wie folgt aus:

\documentclass[a4paper,10pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{tikz,tikz-3dplot}
\usepackage{pstricks,pst-all,pst-3dplot,pst-plot}
\begin{document}
\begin{center}
\begin{pspicture}(-1,-2.5)(11,7)
\psaxes[ticks=none]{->}(5,5)(5,5)(-0.8,-0.8)
\rput(-0.7,5.25){$x_{12}$} \rput(5.5,-0.7){$x_{22}$}
\psaxes[ticks=none]{->}(0,0)(0,0)(5.8,5.8)
\rput(-0.25,5.8){$x_{21}$} \rput(5.8,-0.25){$x_{11}$}
\pscustom[linestyle=none,fillstyle=vlines]{%
\psbezier[plotpoints=100,linecolor=blue]{-}(0.8,4.2)(0.6,1.7321)
(2.968,0.7)(4.2,0.8)
\psbezier[plotpoints=100,linecolor=green]{-}(0.6,3.8)(1.7,5)(4.5,2)
(3.8,0.6)
}

\psbezier[plotpoints=100,linecolor=blue]{-}(0.8,4.2)(0.6,1.7321)
(2.968,0.7)(4.2,0.8)
\psbezier[plotpoints=100,linecolor=green]{-}(0.6,3.8)(1.7,5)(4.5,2)
(3.8,0.6)
\end{pspicture}
\end{center}
\end{document}

Eigentlich erwartete ich, dass die Fläche zwischen den beiden Kurven
gefüllt wird, aber leider missversteht pstricks anscheinend die
Anfangspunkte irgendwie.

Wäre nett, wenn mir da jemand auf die Sprünge helfen könnte, wie das
Problem zu lösen wäre.

Gruß Andreas
Herbert Voss
2011-06-12 06:02:46 UTC
Permalink
Post by Andreas Gick
Eigentlich erwartete ich, dass die Fläche zwischen den beiden Kurven
gefüllt wird, aber leider missversteht pstricks anscheinend die
Anfangspunkte irgendwie.
\pscustom erstellt einen _geschlossenen_ Pfad, der gefüllt
wird. Dazu benutzen folgende Funktionen jeweils den aktuellen
Punkt als Startpunkt. Also hat die zweite Bezierkurve nur
drei Argumente, da der erste Punkt dem letzten der ersten
entspricht. Also so etwas:

\documentclass{article}
\usepackage{pst-plot}
\begin{document}
\begin{center}
\begin{pspicture}(-1,-1)(6,6)
\psaxes[ticks=none]{->}(5,5)(5,5)(-0.8,-0.8)[$x_{12}$,90][$x_{22}$,0]
\psaxes[ticks=none]{->}(0,0)(0,0)(5.8,5.8)[$x_{21}$,-90][$x_{11}$,180]
\pscustom[fillstyle=vlines]{%
\psbezier(0.8,4.2)(0.6,1.7321)(2.968,0.7)(4.2,0.8)
\psbezier(4.5,2)(1.7,5)(0.8,4.2)
}
\psbezier[linecolor=blue]{-}(0.8,4.2)(0.6,1.7321)(2.968,0.7)(4.2,0.8)
\psbezier[linecolor=green]{-}(0.8,4.2)(1.7,5)(4.5,2)(4.2,0.8)
\end{pspicture}
\end{center}
\end{document}

Da du aber anscheinend nur das Innenteil füllen willst, ist
\pscustom ungeeignet und Clipping angebracht.

Herbert
Andreas Gick
2011-06-12 11:04:14 UTC
Permalink
Post by Andreas Gick
Eigentlich erwartete ich, dass die Fläche zwischen den beiden Kurven
gefüllt wird, aber leider missversteht pstricks anscheinend die
Anfangspunkte irgendwie.
\pscustom erstellt einen _geschlossenen_ Pfad, der gefüllt wird. Dazu
benutzen folgende Funktionen jeweils den aktuellen Punkt als Startpunkt.
Also hat die zweite Bezierkurve nur drei Argumente, da der erste Punkt
\documentclass{article}
\usepackage{pst-plot}
\begin{document}
\begin{center}
\begin{pspicture}(-1,-1)(6,6)
\psaxes[ticks=none]{->}(5,5)(5,5)(-0.8,-0.8)[$x_{12}$,90][$x_{22}$,0]
\psaxes[ticks=none]{->}(0,0)(0,0)(5.8,5.8)[$x_{21}$,-90][$x_{11}$,180]
\pscustom[fillstyle=vlines]{%
\psbezier(0.8,4.2)(0.6,1.7321)(2.968,0.7)(4.2,0.8)
\psbezier(4.5,2)(1.7,5)(0.8,4.2)
}
\psbezier[linecolor=blue]{-}(0.8,4.2)(0.6,1.7321)(2.968,0.7)(4.2,0.8)
\psbezier[linecolor=green]{-}(0.8,4.2)(1.7,5)(4.5,2)(4.2,0.8)
\end{pspicture}
\end{center}
\end{document}
Da du aber anscheinend nur das Innenteil füllen willst, ist \pscustom
ungeeignet und Clipping angebracht.
Herbert
Hallo Herbert,

danke für die schnelle Antwort. Mit psclip hab' ich auch schon
'rumgespielt, doch das Ergebnis ist auch nicht ganz das, was ich erwartet
hätte. Mein Versuch mit psclip sieht so aus:
\documentclass[a4paper,10pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{pstricks,pst-all,pst-plot}
\begin{document}
\begin{center}
\begin{pspicture}(-1,-2.5)(11,7)
\psaxes[ticks=none]{->}(5,5)(5,5)(-0.8,-0.8)
\psaxes[ticks=none]{->}(0,0)(0,0)(5.8,5.8)

\begin{psclip}{
\psbezier[plotpoints=100,linecolor=blue]{-}(0.8,4.2)(0.6,1.7321)
(2.968,0.7)(4.2,0.8)
\psbezier[plotpoints=100,linecolor=green]{-}(0.6,3.8)(1.7,5)(4.5,2)
(3.8,0.6)
\psframe[fillstyle=vlines,hatchangle=45,fillcolor=black](0,0)(10,10)}
\end{psclip}

\psbezier[plotpoints=100,linecolor=blue]{-}(0.8,4.2)(0.6,1.7321)
(2.968,0.7)(4.2,0.8) %\rput[tr](0.8,4.45){$I_{1}$}
\psbezier[plotpoints=100,linecolor=green]{-}(0.6,3.8)(1.7,5)(4.5,2)
(3.8,0.6)
\end{pspicture}
\end{center}
\end{document}

Leider wird so nur ein kleiner Teil der dazwischen liegenden Fläche
schraffiert bzw. "geclipt"... Warum?

Gruß Andreas
Herbert Voss
2011-06-13 07:38:03 UTC
Permalink
Post by Andreas Gick
Leider wird so nur ein kleiner Teil der dazwischen liegenden Fläche
schraffiert bzw. "geclipt"... Warum?
das ist ein wenig tricky, da man ja faktisch "die Schnittpunkte"
ermitteln muss:

\documentclass{article}
\usepackage{pst-plot}
\begin{document}

\begin{pspicture}(-1,-1)(6,6)
\psaxes[ticks=none]{->}(5,5)(5,5)(-0.8,-0.8)[$x_{12}$,90][$x_{22}$,0]
\psaxes[ticks=none]{->}(0,0)(0,0)(5.8,5.8)[$x_{21}$,-90][$x_{11}$,180]
\psclip{%
\pscustom[linestyle=none]{%
\psbezier(0.8,4.2)(0.6,1.7321)(2.968,0.7)(4.2,0.8)
\lineto(4.2,6)}
\pscustom[linestyle=none]{%
\psbezier(3.8,0.6)(4.5,2)(1.7,5)(0.6,3.8)
\lineto(0.6,0)}
}
\psframe[fillstyle=vlines](5,5)
\endpsclip
\psbezier[linecolor=blue](3.8,0.6)(4.5,2)(1.7,5)(0.6,3.8)
\psbezier[linecolor=red](0.8,4.2)(0.6,1.7321)(2.968,0.7)(4.2,0.8)
\end{pspicture}

\end{document}


Herbert
Andreas Gick
2011-06-13 15:52:39 UTC
Permalink
Vielen Dank für den Tip, wär' ich nie drauf gekommen.

Gruß Andreas

Loading...