Autor Thema: Wellenlinie bzw. Sinuskurve erzeugen  (Gelesen 3466 mal)

chf

  • Member
Wellenlinie bzw. Sinuskurve erzeugen
« am: Mittwoch, 23. Januar 2013, 12:25 »
Liebe Freunde,

zur "Schönheitspflege":
für Wellenlinien finde ich nur das Tilde - Zeichen (auch in verschiedenen Foren wird das als Empfehlung gegeben).
Die Reihung dieses Zeichens hat aber natürlich Lücken, die nicht zu übersehen sind.
Gibt es eine Möglichkeit, das zu verdichten? Oder etwas ganz anderes?

Grüe
Christa



kilgore

  • Member
Re: Wellenlinie bzw. Sinuskurve erzeugen
« Antwort #1 am: Mittwoch, 23. Januar 2013, 12:34 »
Hi Christa,

In meiner Zeichentabelle ist eine Lückenlose Wellenlinie:



mehrere hintereinander:
〰〰〰〰

Hilft das dir? Sonst habe ich irgendwo eine Wellenlinie in Postscript abgespeichert...

Gruß
kil

eluze

  • Member
Re: Wellenlinie bzw. Sinuskurve erzeugen
« Antwort #2 am: Mittwoch, 23. Januar 2013, 12:38 »
Zitat
für Wellenlinien finde ich nur das Tilde - Zeichen

hallo Christa

mit genaueren angaben, wo/wozu du wellenlinien möchtest, könnte man gezielter suchen/helfen!

Eluze

chf

  • Member
Re: Wellenlinie bzw. Sinuskurve erzeugen
« Antwort #3 am: Mittwoch, 23. Januar 2013, 15:39 »
...Sie muss gleichmäßig verlaufen. Meine unzulängliche Variante seht ihr im Anhang. Die Abstände zwischen den einzelnen Zeichen müssten verschwinden.
Laut zeitgenössischer Notenausgaben soll das "längere improvisatorische Fortsetzung" anweisen.
Gerade kam mir die Idee, ob nicht mit \override Glissando #'style = #'zigzag und \hideNotes was zu machen ist, aber da sind die Wellen zu eng und klein...


eluze

  • Member
Re: Wellenlinie bzw. Sinuskurve erzeugen
« Antwort #4 am: Mittwoch, 23. Januar 2013, 17:01 »
oder #'trill

Be-3

  • Member
Re: Wellenlinie bzw. Sinuskurve erzeugen
« Antwort #5 am: Mittwoch, 23. Januar 2013, 19:30 »
Hallo Christa,

weil man solche Wellenlinien (squiggly lines :)) doch schon ab und zu mal brauchen kann (z. B. auch für colla-parte-Markierungen), habe ich für Deine Fröbel-Hommage eine Markup-Funktion namens \squiggle geschrieben.
Sie hat drei Parameter: Breitenfaktor, Höhenfaktor und Anzahl der Wiederholungen (siehe Beispiele).
Sinus-Funktionen könnte man zwar auch bemühen, aber für unseren Fall reichen auch Bézier-Kurven. Erzeugt wir Postscript-Code, der dann mit \pattern so oft wie gewünscht wiederholt wird.

Als zweites habe ich noch eine \zacken-Funktion nach gleichem Strickmuster hinzugefügt, weil ich so etwas beim "Würfelspiel" auch gesehen habe.

\version "2.16.1"

#(define-markup-command (squiggle layout props wd ht rep )
  (number? number? number?)
  #:category graphic
  #:properties ((thickness 2))
  (let* ((th (* (ly:output-def-lookup layout 'line-thickness) thickness))
         (x 0)
         (step (* wd 0.5))
         (strht (number->string ht))
         (strps (string-append (number->string th) " setlinewidth "
                 "0 0 moveto "
                 (number->string (* step 1)) " " strht " "
                 (number->string (* step 2)) " " strht " "
                 (number->string (* step 3)) " 0 curveto "
                 (number->string (* step 3)) " 0 moveto "
                 (number->string (* step 4)) " -" strht " "
                 (number->string (* step 5)) " -" strht " "
                 (number->string (* step 6)) " 0 curveto stroke"  )))
       (interpret-markup layout props (markup #:pattern rep X (* 3 wd)
                                                                 #:postscript strps #:hspace (* 3 wd)))))

#(define-markup-command (zacken layout props wd ht rep )
  (number? number? number?)
  #:category graphic
  #:properties ((thickness 2))
  (let* ((th (* (ly:output-def-lookup layout 'line-thickness) thickness))
         (x 0)
         (step (* wd 1))
         (strht (number->string ht))
         (strpsA (string-append (number->string th) " setlinewidth "
                 "0 0 moveto "
                 (number->string (* step 1)) " " strht " lineto "
                 (number->string (* step 2)) " 0 lineto stroke"))
         (strpsB (string-append (number->string th) " setlinewidth "
                 "0 0 moveto "
                 (number->string (* step 2)) " 0 lineto stroke")))
       (interpret-markup layout props (markup #:concat (#:pattern (- rep 1) X 0
                           (#:concat ( #:postscript strpsA #:hspace (* 2 wd)
                                            #:postscript strpsB #:hspace (* 2 wd)))
                                            #:postscript strpsA #:hspace (* 2 wd))))))


% Anwendungsbeispiele

\markup {
  \column {
    \line { "Markup:" \squiggle #1 #1 #20 "squiggly line" }
    \line { "Oder so:" \override #'(thickness . 5) \raise #0.7 \squiggle #1 #1 #20 }
    \vspace #1
    \line { "... oder so:" \squiggle #0.7 #5 #10  }
    \vspace #3
  }
}

\relative c' {
  \once \override TextScript #'extra-offset = #'(0 . -2.53)
  s1*6^\markup \squiggle #0.7 #0.7 #15
}

\relative c'' {
  \override Stem #'stencil = ##f
  \override Staff.TimeSignature #'stencil = ##f
  \time 8/4
  s1*0_"rechte Hand/Labium" 
  c4 -\tweak #'padding #1 ^\markup \zacken #1 #2 #6
  c c c c c c \tweak #'X-extent #'(0 . 18) c
  -\tweak #'extra-offset #'(2.7 . -3.05) ^\markup \squiggle #0.8 #0.7 #6
}

Viele Grüße
Torsten

chf

  • Member
Re: Wellenlinie bzw. Sinuskurve erzeugen
« Antwort #6 am: Donnerstag, 24. Januar 2013, 12:47 »
Hallo Torsten,

phantastisch! und sogar mit Zugabe!
Mit den Bézier-Kurven habe ich mich versucht, habe aber nicht kapiert, wie man's richtig macht.
Manche Zeichen habe ich ja mit LaTexDraw verfertigt, aber nach wieviel Versuchen? Das sind für mich alles "Böhmische Dörfer".

Danke! und herzliche Grüße
Christa