Kurvenstich


8

Beim Kurvensticken werden mehrere gerade Linien "zusammengenäht", um eine Kurve zu erstellen, wie folgt:

Imgur

Eine Erklärung zu Kurvenstichen finden Sie auf dieser Website .

Wir werden unsere Kurve oben links auf dem Bildschirm zeichnen, wie im Bild oben gezeigt.

Bei einer Ganzzahl n(über STDIN oder einen Funktionsparameter), bei der es sich um die Anzahl der zu zeichnenden Linien handelt, und bei einer Ganzzahlpixel p, die das Intervall zwischen den Startpunkten darstellt, wird eine gerade Linienkurve gezeichnet .

Horizontale / vertikale Linien sind erforderlich und sollten Teil der Zeilenanzahl sein.


Beispielausgaben:

n = 25, p = 15

Imgur

n = 20, p = 20

Imgur


Dies ist eine Herausforderung, sodass der kürzeste Code gewinnt .


Oh ja! D'oh ...
James Williams

Die Kurve ist in der Tat eine Parabel. Ich kann mich nicht erinnern, wo ich das gelesen habe. Wenn ich ein Pedant wäre, würde ich darauf hinweisen, dass es keine "gerade Linie" ist, sondern eine Annäherung an eine Kurve, die aus geraden Linien aufgebaut ist :-)
Level River St

@ Martin Yup, Pixel.
James Williams

@Martin Die horizontale Linie sollte nicht erforderlich sein, da der Rand des Fensters die Linien bildet.
James Williams

2
Oh Tag, ich habe das zum Spaß gemacht, wenn ich mich im Unterricht gelangweilt habe ... wusste nicht, dass andere Leute genau das Gleiche getan haben!
Claudiu

Antworten:


5

Mathematica, 55 51 50 47 64 68 Bytes

f=Graphics[Line@Table[#2{{i-1,#+1},{0,i+1}},{i,#}],ImageSize->#*#2]&

Definiert eine Funktion, die das Bild wie angegeben ergibt, wenn es wie aufgerufen wird

f[25,15]

Nachgeben

Geben Sie hier die Bildbeschreibung ein

Bearbeiten : Es mussten einige Zeichen hinzugefügt werden, um sicherzustellen, dass der zweite Parameter tatsächlich als Pixel interpretiert wurde.

Bearbeiten : vier weitere Bytes zum Zeichnen der horizontalen Linien.


4

Python - 74

Da die Frage keine Einheiten, Achsenskalierung usw. angibt, habe ich die folgende Mindestlösung:

import pylab
n,p=input()
for i in range(n):pylab.plot([0,i*p],[(i-n)*p,0])

Geben Sie hier die Bildbeschreibung ein


Ohne Berücksichtigung von Einheiten und Achsenskalierung spart die Mindestlösung vier Zeichen, indem sie weggelassen wird *p;). Sind Sie sicher, dass Sie keine horizontale und / oder vertikale Linie hinzufügen? Diese sind nicht in den Beispielausgaben enthalten. Schließlich bemerkte ich in meinem, dass es kürzer ist, die erste Koordinate horizontal anstatt der zweiten zu versetzen (weil Sie die -und die Klammern speichern können )
Martin Ender

2
(Die Frage spezifiziert Einheiten übrigens jetzt als Pixel.)
Martin Ender

3

Bash + Imagemagick + xview, 124 Bytes

for((;i<$1;));{
s+=" -draw 'line $[i*$2],0 0,$[($1-i++)*$2]'"
}
eval convert -size $[$1*$2]x$[$1*$2] xc:$s png:-|xview stdin

Ausgabe für ./curvestitch.sh 25 15:

Geben Sie hier die Bildbeschreibung ein


Yay für das Überlaufen der maximalen Befehlszeilenlänge, wenn Sie nicht vorsichtig sind. Nice one
tomsmeding

2

Perl, 121 130 Bytes

Die Eingabe erfolgt über STDIN. Die Werte sind durch Kommas getrennt.

EDIT: Wir haben neue Regeln. Ich bin mir nicht sicher warum, aber die ersten beiden Pixel sind unsichtbar und ich musste einen Versatz hinzufügen ...

use Tk;<>=~/,/;$c=tkinit->Canvas(-width=>$w=$`*$'-$',-height=>$w)->pack;$c->createLine(2,2+$_*$',2+$w-$_*$',2)for 0..~-$`;MainLoop

Hier sind einige Tests:

25x15:

25x15

6x72:

6x72


2

BBC Basic, 58 ASCII-Zeichen, Token-Dateigröße 49

INPUTn,p:p*=2FORi=1TOn:MOVEi*p-p,974DRAW0,974-(n-i)*p:NEXT

Laden Sie den Emulator unter http://www.bbcbasic.co.uk/bbcwin/bbcwin.html herunter

p*=2 wird benötigt, weil BBC Basic im Standardmodus ein logisches Quadrat von 2x2 einem einzelnen physischen Pixel zuordnet.

BBC Basic hat den Ursprung in der unteren linken Ecke des Bildschirms, wobei die y-Koordinaten nach oben gehen. Auf meinem Computer hat das Standardfenster eine obere y-Koordinate von 974 (Ihre kann unterschiedlich sein). 7 Zeichen könnten gespeichert werden, wenn es erlaubt wäre, in der unteren linken Ecke des Bildschirms zu zeichnen. Durch Hinzufügen MODE16nach dem ersten :wird die Größe des Fensters so geändert, dass die obere y-Koordinate garantiert 799 beträgt.

Geben Sie hier die Bildbeschreibung ein


Dies wird schnell zu einer gefährlichen Golfsprache. CJam wer?
Soham Chowdhury

1

HTML + JavaScript 155 157 183

Bearbeiten: Erfahren Sie, welche Dinge ich ohne Funktionsverlust schneiden kann.
Bearbeiten 2: wie von @Optimizer vorgeschlagen

<canvas id='c'/><script>
p=prompt,s=p(l=p(t=c.getContext("2d")));for(c.width=c.height=y=s*l,x=0;l--;x-=s)t.moveTo(0,y-=s),t.lineTo(-x,0);t.stroke()
</script>

Fiddle erster Eingang Anzahl von Zeilen , zweites Eingangspixelintervall

Ungolfed Fiddle


l = p (s = p (t = c.getContext ("2d")))
Optimierer

@ Optimizer Ich denke, ich muss Breite und Höhe einstellen, bevor ich den Kontext
bekomme

1
Nein, das funktioniert: jsfiddle.net/6ke43m7c/10
Optimizer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.