Costura em curva

8

A costura da curva é o processo de "costura" em conjunto com várias linhas retas para criar uma curva, da seguinte forma:

Imgur

Para obter uma explicação da costura curva, visite este site .

Desenharemos nossa curva no canto superior esquerdo da tela, como mostra a imagem acima.

Dado um número inteiro n(via STDIN ou um parâmetro de função), sendo o número de linhas a desenhar e um número inteiro de ppixels, sendo o intervalo entre os pontos de partida, desenhe uma curva de linha reta.

Linhas horizontais / verticais são necessárias e devem fazer parte da contagem de linhas.


Exemplo de saídas:

n = 25, p = 15

Imgur

n = 20, p = 20

Imgur


Este é um desafio do , pelo que o código mais curto vence .

James Williams
fonte
Oh sim! D'oh ...
James Williams
A curva é de fato uma parábola. Não me lembro de onde li esse pensamento. Se eu fosse um pedante gostaria de salientar que não é uma "curva linha reta", mas uma aproximação de uma curva construída a partir de linhas retas :-)
Nível River St
@ Martin Yup, pixels.
James Williams
@ Martin A linha horizontal não deve ser necessária, porque a borda da janela compõe as linhas.
James Williams
2
Oh dayum, eu costumava fazer isso por diversão quando entediado na aula ... não sabia que outras pessoas tinham feito exatamente a mesma coisa!
Claudiu 12/09

Respostas:

5

Mathematica, 55 51 50 47 64 68 bytes

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

Define uma função que produz a imagem conforme especificado quando chamada como

f[25,15]

Produzindo

insira a descrição da imagem aqui

Editar : foi necessário adicionar alguns caracteres para garantir que o segundo parâmetro fosse realmente interpretado como pixels.

Editar : mais quatro bytes para plotar as linhas horizontais.

Martin Ender
fonte
4

Python - 74

Como a pergunta não especifica unidades, dimensionamento de eixos etc., estou apresentando a seguinte solução mínima:

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

insira a descrição da imagem aqui

Falko
fonte
Desconsiderando as unidades e o dimensionamento do eixo, a solução mínima salva quatro caracteres ao omitir *p;). Além disso, você tem certeza de que não está adicionando uma linha horizontal e / ou vertical? esses não estão nas saídas de exemplo. finalmente, notei na minha, que é mais curto para compensar a primeira coordenada horizontalmente em vez do segundo (porque você pode salvar o -e os parênteses)
Martin Ender
2
(A questão especifica unidades como pixels agora, btw).
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

Saída para ./curvestitch.sh 25 15:

insira a descrição da imagem aqui

Trauma Digital
fonte
Sim, para exceder o comprimento máximo da linha de comando, se você não for cuidadoso. Nice one
tomsmeding 13/09/14
2

Perl, 121 130 bytes

A entrada é via STDIN. Os valores são separados por vírgula.

EDIT: Temos novas regras. Não sei por que, mas os dois primeiros pixels são invisíveis e tive que adicionar um deslocamento ...

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

Aqui estão alguns testes:

25x15:

25x15

6x72:

6x72

core1024
fonte
2

BBC Basic, 58 caracteres ascii, tamanho de arquivo tokenised 49

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

Faça o download do emulador em http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

p*=2 é necessário porque, no modo padrão, o BBC Basic mapeia um quadrado lógico de 2x2 para um único pixel físico.

O BBC Basic tem a origem no canto inferior esquerdo da tela, com as coordenadas y subindo. Na minha máquina, a janela padrão possui uma coordenada y superior de 974 (a sua pode ser diferente.) 7 caracteres podem ser salvos se for permitido plotar no canto inferior esquerdo da tela. A adição MODE16após a primeira :redimensionará a janela para garantir que a coordenada y superior seja 799.

insira a descrição da imagem aqui

Level River St
fonte
Isso está rapidamente se tornando uma linguagem perigosa para o golfe. CJam quem?
Soham Chowdhury
1

Html + JavaScript 155157 183

Edit: learnig o que eu posso cortar sem perda de funcionalidade
Edit 2: como sugerido por @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>

Fiddle Primeiro número de linhas de entrada, segundo intervalo de pixels de entrada

Violino Ungolfed

edc65
fonte
l = p (s = p (t = c.getContext ("2d"))))
Otimizador
@Optimizer Eu acho que preciso de largura definida e altura antes de começar o contexto
edc65
1
Não, isso funciona: jsfiddle.net/6ke43m7c/10
Optimizer