Costura Curva


8

La costura curva es el proceso de "coser" varias líneas rectas para crear una curva, de esta manera:

Imgur

Para una explicación de la costura curva, visite este sitio web .

Dibujaremos nuestra curva en la esquina superior izquierda de la pantalla, como se muestra en la imagen de arriba.

Dado un número entero n(a través de STDIN o un parámetro de función), que es el número de líneas para dibujar, y un número entero de ppíxeles, que es el intervalo entre los puntos de inicio, dibuja una curva de línea recta.

Las líneas horizontales / verticales son necesarias y deben ser parte del recuento de líneas.


Resultados de ejemplo:

n = 25, p = 15

Imgur

n = 20, p = 20

Imgur


Este es un desafío de , por lo que gana el código más corto .


¡Oh si! D'oh ...
James Williams

La curva es de hecho una parábola. No recuerdo dónde leí ese pensamiento. Si fuera pedante, señalaría que no es una "curva de línea recta" sino una aproximación de una curva construida a partir de líneas rectas :-)
Level River St

@ Martin Yup, píxeles.
James Williams

@ Martin La línea horizontal no debería ser necesaria, porque el borde de la ventana formará las líneas.
James Williams

2
Oh día, solía hacer esto por diversión cuando estaba aburrido en clase ... ¡no sabía que otras personas habían hecho exactamente lo mismo!
Claudiu

Respuestas:


5

Mathematica, 55 51 50 47 64 68 bytes

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

Define una función que produce la imagen como se especifica cuando se llama like

f[25,15]

Flexible

ingrese la descripción de la imagen aquí

Editar : tuve que agregar algunos caracteres para asegurarme de que el segundo parámetro se interpretara realmente como píxeles.

Editar : cuatro bytes más para trazar las líneas horizontales.


4

Python - 74

Como la pregunta no especifica unidades, escalas de ejes, etc., se me ocurre la siguiente solución mínima:

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

ingrese la descripción de la imagen aquí


Sin tener en cuenta las unidades y la escala del eje, la solución mínima ahorra cuatro caracteres al omitir *p;). Además, ¿estás seguro de que no estás agregando una línea horizontal y / o vertical? esos no están en las salidas de ejemplo. Finalmente, noté en el mío, que es más corto compensar la primera coordenada horizontalmente en lugar de la segunda (porque puedes guardar el -y los paréntesis)
Martin Ender

2
(La pregunta sí especifica unidades como píxeles ahora, por cierto)
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

Salida para ./curvestitch.sh 25 15:

ingrese la descripción de la imagen aquí


Sí, por desbordar la longitud máxima de la línea de comando si no tienes cuidado. Nice one
tomsmeding

2

Perl 121 130 bytes

La entrada es a través de STDIN. Los valores están separados por comas.

EDITAR: Tenemos nuevas reglas. No estoy seguro de por qué, pero los dos primeros píxeles son invisibles y tuve que agregar un desplazamiento ...

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

Aquí hay algunas pruebas:

25x15:

25x15

6x72:

6x72


2

BBC Basic, 58 caracteres ascii, tamaño de archivo tokenizado 49

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

Descargue el emulador en http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

p*=2 es necesario porque en el modo predeterminado, BBC Basic asigna un cuadrado lógico de 2x2 a un solo píxel físico.

BBC Basic tiene el origen en la esquina inferior izquierda de la pantalla, con las coordenadas subiendo. En mi máquina, la ventana predeterminada tiene una coordenada y superior de 974 (la suya puede ser diferente). Se podrían guardar 7 caracteres si se permitiera trazar en la esquina inferior izquierda de la pantalla. Agregar MODE16después del primero :cambiará el tamaño de la ventana para que la coordenada superior y se garantice que sea 799.

ingrese la descripción de la imagen aquí


Esto se está convirtiendo rápidamente en un lenguaje de golf peligroso. CJam quien?
Soham Chowdhury

1

HTML + JavaScript 155157183

Editar: aprender qué cosas puedo cortar sin pérdida de funcionalidad
Editar 2: como lo sugiere @Optimizer

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

Violín Primer número de líneas de entrada, segundo intervalo de píxeles de entrada

Violín sin golf


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

@Optimizer Creo que necesito establecer el ancho y la altura antes de obtener el contexto
edc65

1
No, esto funciona: jsfiddle.net/6ke43m7c/10
Optimizer
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.