Zeichnen wir eine Funktion f (x) = sin (πx) + 0,5 sin (3πx) über die Domäne [-3,3] . Wir können dies als lose Schnur interpretieren, die auf einem Brett liegt. Fahren wir nun n Nägel in die Platine an den Positionen (x 1 , y 1 ) bis (x n , y n ) , wo x i ∈ (-3,3) und y i ∈ [-1,1] sind . Stellen Sie sich vor, am Ende der Saite befinden sich zwei Ösen an den Positionen (-3,0) und (3,0).. Wir können jetzt die Enden der Schnur nehmen und durch die Ösen ziehen, bis die Schnur gespannt ist. Dies verformt unser Diagramm in eine stückweise lineare Funktion.
Einige Bilder könnten helfen. Nehmen Sie 8 Nägel bei (-2,8, -0,7), (-2,5, -0,9), (-1,2, .2), (-0,5, .8), (0,5, .4), (1,2, -0,9). (1,5, -0,6), (1,8, -0,8) . Die folgenden drei Darstellungen zeigen den oben beschriebenen Prozess:
Für größere Version: Rechtsklick -> In neuem Tab öffnen
Und hier ist eine Animation zum Spannen der Saite, falls Sie Schwierigkeiten haben, sie zu visualisieren:
Die Herausforderung
Zeichnen Sie anhand einer Liste von "Nägeln" (die nicht unbedingt sortiert ist) diese Nägel und die gespannte Zeichenfolge, wenn sie von der Form der obigen Funktion ausgeht . F.
Sie können ein Programm oder eine Funktion schreiben und Eingaben über STDIN, ARGV oder Funktionsargument vornehmen. Sie können das Ergebnis entweder auf dem Bildschirm anzeigen oder ein Bild in einer Datei speichern.
Wenn das Ergebnis gerastert wird, muss es mindestens 300 Pixel breit und 100 Pixel hoch sein. Der Koordinatenbereich von (-3, -1.1) bis (3,1.1) muss mindestens 75% der horizontalen und vertikalen Ausdehnung des Bildes abdecken. Die Längenskalen von x und y müssen nicht gleich sein. Sie müssen die Nägel (mindestens 3x3 Pixel) und die Schnur (mindestens 1 Pixel breit) zeigen. Sie können die Achsen einschließen oder nicht.
Sie haben die Wahl zwischen Farben, aber Sie benötigen mindestens zwei unterscheidbare Farben: eine für den Hintergrund und eine für die Nägel und die Schnur (diese können jedoch unterschiedliche Farben haben).
Sie können davon ausgehen, dass alle Nägel mindestens 10 -5 Einheiten von f entfernt sind (damit Sie sich keine Gedanken über Gleitkomma-Ungenauigkeiten machen müssen).
Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).
Mehr Beispiele
Hier sind zwei weitere (einfachere) Beispiele:
{{-2.5, 1}, {-1.5, -1}, {-0.5, 1}, {0.5, -1}, {1.5, 1}, {2.5, -1}}
(Die Zeichenfolge stimmt mit der x- Achse überein.)
{{-2.7, -0.5}, {-2.3, -0.5}, {-1.7, 0.5}, {-1.3, 0.5}, {-0.7, -0.5}, {-0.3, -0.5}, {0.5, 1}, {1.5, -1}, {2.5, 1}}