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 .

James Williams
quelle
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.

Martin Ender
quelle
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

Falko
quelle
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

Digitales Trauma
quelle
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

core1024
quelle
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

Level River St.
quelle
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

edc65
quelle
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