Desenhar / plotar um gráfico de coração

45

Seu desafio é desenhar / traçar um dos corações abaixo. O tamanho deve ter pelo menos 50 x 50 pixels (os gráficos vetoriais estão OK). Você pode escolher qual dos corações deseja desenhar / traçar. Eixos, linhas de grade etc. são aceitos. Deve haver pelo menos 100 coordenadas / pontos distintos no gráfico. O coração pode ser preenchido com cores, se você quiser.

insira a descrição da imagem aqui

As equações são:

insira a descrição da imagem aqui

ou

insira a descrição da imagem aqui

insira a descrição da imagem aqui

testá no intervalo [-1, 1].

ou

insira a descrição da imagem aqui

ou

insira a descrição da imagem aqui

Este é o portanto o código mais curto (em cada idioma) em bytes vence. Forneça a saída (ou link para um intérprete online).

Stewie Griffin
fonte

Respostas:

66

TI-80 BASIC, 45 43 41 39 bytes

LBL 1
RAND4-2->X
RAND4-2
IF (X²+ANS²-1)³<X²ANS³
PT-ON(X,ANS
GOTO 1

insira a descrição da imagem aqui

Demorou um pouco e minha bateria está fraca, então eu não queria continuar.

Tentei usar a segunda equação, mas não consegui fazê-la funcionar , na verdade acabou sendo mais longa, então apenas adaptei a outra resposta que tinha.

EDIT: Acabei de notar o requisito de 50x50 pixels, infelizmente a tela tem apenas 47 pixels de altura, o que não é possível.

12Me21
fonte
1
realmente criativo!
dalearn
8
Já faz um tempo, mas você pode substituir IF (X²+ANS²-1)³-X²ANS³<0por IF (X²+ANS²-1)³<X²ANS³?
wchargin
Ah, não acredito que não pensei nisso! graças
12Me21
45

Perl, 86 bytes

$y=1-$_/25,say+map$y**3*($_*=$_/1e3)-($_+$y**2-1)**3>0?$|--?v60:3:$",-40..40for-6..50

Corra com perl -E.

Plota um coração ASCII preenchido, usando a primeira equação. Observe que o eixo x é esticado por um fator de ~ 1.265: isso é para neutralizar o fato de que as fontes de terminal geralmente são muito maiores verticalmente do que horizontalmente.

Resultado:

                3<3<3<3<3<3<3<                   3<3<3<3<3<3<3<                 
              3<3<3<3<3<3<3<3<3<3<           3<3<3<3<3<3<3<3<3<3<               
            3<3<3<3<3<3<3<3<3<3<3<3<       3<3<3<3<3<3<3<3<3<3<3<3<             
          3<3<3<3<3<3<3<3<3<3<3<3<3<3<   3<3<3<3<3<3<3<3<3<3<3<3<3<3<           
         3<3<3<3<3<3<3<3<3<3<3<3<3<3<3< 3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<          
        3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3 <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<         
       3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3        
      <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<       
      3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3       
     <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<      
     3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3      
    <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<     
    3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3     
    <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<     
    3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3     
    <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<     
   3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3    
   <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<    
    3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3     
    <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<     
    3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3     
    <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<     
    3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3     
     <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<      
     3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3      
     <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<      
      3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3       
      <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<       
       3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3        
       <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<        
        3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3         
         <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<          
         3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3          
          <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<           
           3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3            
            <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<             
             3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3              
              <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<               
               3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3                
                <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<                 
                 3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3                  
                  <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<                   
                   3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3                    
                     <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<                      
                      3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3                       
                       <3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<3<                        
                         3<3<3<3<3<3<3<3<3<3<3<3<3<3<3                          
                           <3<3<3<3<3<3<3<3<3<3<3<3<                            
                            3<3<3<3<3<3<3<3<3<3<3<3                             
                              <3<3<3<3<3<3<3<3<3<                               
                                3<3<3<3<3<3<3<3                                 
                                  <3<3<3<3<3<                                   
                                    3<3<3<3                                     
                                     <3<3<                                      
                                       3                                        

Explicação (desde que o OP solicitou):

condition := $y**3*($_*=$_/1e3)-($_+$y**2-1)**3>0

Esta é simplesmente a primeira equação, ligeiramente reorganizada para torná-la mais curta. $ y representa diretamente y na fórmula. $ _ é inicialmente proporcional a x, mas é multiplica-se consigo mesmo ( $_*=$_/1e3), tornando-o proporcional a x². Como x² é usado duas vezes na fórmula, isso economiza alguns bytes.

1e3significa 1000 e foi escolhido porque é curto e o resultado parece bom. ** é o operador de energia do Perl. Eu uso >0mais do que ==0porque quero um coração cheio.

flip_flop := $|--?v60:3

v60 é um abuso da sintaxe arcaica da cadeia de versão para denotar o caractere com o código ASCII 60: '<'.

$ | é uma variável mágica que só pode ser 0 ou 1. Decrementar quando já é 0 o define como 1. Decrementar quando é 1 o define naturalmente como 0. Portanto, $ | - é frequentemente usado como um flip-flop: sempre é avaliado, alterna entre verdadeiro e falso.

Como um todo, essa expressão retorna alternativamente '<' e 3.

inner_loop := <condition> ? <flip_flop> :$"

Ternários aninhados. Se a condição for falsa (→ estamos fora do coração), for avaliada como $ ", que é uma variável mágica cujo padrão é" "(um único espaço). Se a condição for verdadeira (→ estamos dentro do coração), avalia flip_flop.

outer_loop := say+map <inner_loop> ,-40..40

Avalia inner_loop repetidamente, com $ _ (variável "padrão" de Perl) indo de -40 a 40, em incrementos de 1. Ele coleta os resultados dessas avaliações em uma lista temporária e depois imprime todos, concatenados, terminando com uma nova linha .

$y=1-$_/25, <outer_loop> for-6..50

Isso executa o outer_loop repetidamente, com $ y passando de 1,24 (1 - (-6 / 25)) para -1 (1 - 50/25), em decréscimos de 0,04.

Observe que y é dividido por 25, enquanto x² é dividido por 1000, que é o mesmo que dividir x por sqrt (1000). O fator ~ 1.265 que mencionei é sqrt (1000) / 25.

Grimmy
fonte
5
Huh, eu acho que não viola qualquer regra ... O meu favorito até agora :) Eu adoraria uma explicação embora :)
Stewie Griffin
1
Estou confuso sobre alguma coisa. Por que usar? V60 over, digamos, "<"?
22617 Nic
Mesmo comprimento, mas mais fácil de digitar.
Grimmy #
Um coração feito de corações.
TheWanderer
34

Mathematica WolframAlpha, 17 15 13 11 bytes

Retirou 2 bytes graças a Martin Ender (1ª curva do coração -> curva do coração 1)

Raspou outros 2 bytes graças a Martin Ender (curva do coração 1 -> heartcurve1)

Provavelmente isso é trapaça (a solução óbvia), mas aqui vai.

heartcurve1

Experimente aqui!

Tenho certeza de que há uma maneira de encurtar o primeiro, coração ou curva, de modo que Wolfram ainda o aceite. Bem, está livre de espaços agora, talvez algum tipo de abreviação para coração?

Recebo pontos de bônus por plotar 2 deles?

heartcurves

Tente isso aqui!

Thunda
fonte
5
heart curve 1
Martin Ender
6
Na verdade, heartcurve1funciona.
Martin Ender
23
@MartinEnder O que no mundo #
Thunda
1
um primeiro de heartcurves parece mais com uma extremidade embora
Mikhail V
@MikhailV 0a curva do coração (cardoide) parece uma bunda.
Thunda
29

Mathematica, 52 bytes

RegionPlot[(x^2+y^2-1)^3-x^2y^3<0,{x,-2,2},{y,-2,2}]

insira a descrição da imagem aqui

Podemos economizar mais um byte, ContourPlotmas o plano de fundo fica um pouco complicado:

ContourPlot[(x^2+y^2-1)^3-x^2y^3,{x,-2,2},{y,-2,2}]

insira a descrição da imagem aqui

Para um byte adicional , poderíamos usar a quarta fórmula e, em PolarPlotvez disso:

PolarPlot[(x=Sin@t)Abs@Cos@t^.5/(x+7/5)-2x+2,{t,0,7}]

insira a descrição da imagem aqui

Martin Ender
fonte
23
"Um pouco trippy" é um pouco de eufemismo ...
Mego
O ContourPlot aciona muito o TOC. Aaaaaah! : D
KeyWeeUsr 15/02
25

Casio fx-7700GH, 21 bytes

sin θ √ Abs cos θ ÷ ( sin θ + 7 ÷ 5 ) - 2 sin θ + 2

A função de gráfico sem nome deve ser inserida em um dos slots de função de gráficos de coordenadas polares e, em seguida, faz o que diz na lata.

O intervalo de representação gráfica deve ser definido manualmente (a menos que ele se ajuste ao intervalo de definição atual), defino-o como Xmin=-2.75, Xmax=2.75, Ymin=-4, Ymax=1.

Também deve funcionar em outras calculadoras Casio Power Graphic Series e, possivelmente, posteriormente, nas calculadoras gráficas Casio.

Um coração desenhado por uma calculadora Casio fx-7700GH (sim, eu sou bem velha e empoeirada)

Jonathan Allan
fonte
18

MATLAB / oitava, 31 bytes

ezplot('(x^2+y^2-1)^3-x^2*y^3')

insira a descrição da imagem aqui

Suever
fonte
9

SmileBASIC, 85 81 bytes

X=RNDF()*4-2Y=RNDF()*4-2GPSET X*50+99,Y*50+99,-(-X*X*Y*Y*Y>POW(X*X+Y*Y-1,3))EXEC.

insira a descrição da imagem aqui

12Me21
fonte
9

Desmos , 20 16 15 bytes

V 2:

xx) .3 y = xx + aa-1

(= xx)^.3y=xx+yy-1)

V 1:

xx + aa-1) 3 = xxy 3

V 0:

(x2+y2-1)3=x2y3
Daniel
fonte
você poderia usar em xxvez dex^2
12Me21 15/17
@ 12Me21, oh, isso é excelente, obrigado!
Daniel
Sua contagem de bytes está incorreta, você tem uma nova linha extra.
Rɪᴋᴇʀ
@Riker, não vejo como está errado. Onde há uma nova linha?
Daniel
imgur.com/a/4eTyt V2 tem 14 bytes
#
7

MATL, 36 bytes

1e4t:w/EqXJX,JY,J|Yl**JX,X^J|.3^*&XG

Experimente no MATL Online

insira a descrição da imagem aqui

Suever
fonte
9
Solução tfw MATL é maior do que MATLAB :)
brainkz
7

Python, 119 116 bytes

from turtle import*
from math import*
t=1
while-t<1:a=abs(t);c=cos(t);goto(sin(t)*c*log(a)*99,c**.5*a**.3*99);t-=.01

Experimente online

x = sin (t) * cos (t) * log (abs (t))

y = cos (t) **. 5 * abs (t) **. 3

mbomb007
fonte
6

SageMath, 66 bytes

polar_plot(sin(x)*abs(cos(x))^.5/(sin(x)+7/5)-2*sin(x)+2,(0,2*pi))

Experimente online

Infelizmente, os nomes longos de implicit_plote parametric_plot(mais a necessidade de definir uma variável diferente da definida implicitamente xpara a primeira) tornam as três primeiras opções muito longas para serem consideradas.

Obrigado a busukxuan e Andrea Lazzarotto por um byte

Mego
fonte
1
Faz ^.5o trabalho no lugar de **.5?
busukxuan
1
@busukxuan Nope. O Sage é construído em Python e ^é XOR.
Mego
1
Mas o sábio substitui ^por **. Eu queria saber se era porque não podia substituir corretamente se seguido por um.
busukxuan
O @busukxuan Sage usa a notação de poder do Python ( **). Se você tentasse usar ^, acabaria com um aviso e um resultado incorreto.
Mego
1
@AndreaLazzarotto Então, aparentemente, minha memória está com defeito. Obrigado.
Mego
6

C, 137 133 bytes

p;float x,y,f;v(){for(p=4e3;p;x=(float)(p%99-50)/35,y=(float)(p/40-45)/40,f=x*x+y*y-1)putchar(p--%99?f*f*f-x*x*y*y*y<1e-3?35:32:10);}

http://codepad.org/zqqYUui8

Obrigado @AlbertRenshaw, eu também mudei os 100s para 99s por mais 2 bytes

Ahemone
fonte
1
+1; Eu gosto do uso de vpara a função, bom talento. Você pode raspar dois bytes, substituindo 4000com 4e3e substituindo 0.001com1e-3
Albert Renshaw
6

Gelatina , 31 bytes

*3×
²+’*3<çị⁾* 
25µNr÷21µ²ç@þUY

Experimente online!

ou 35 bytes com a , em vez de *preencher: altere a linha do meio para ²+’*3<ç×9829Ọ»⁶.

          ♥♥♥♥♥♥♥♥♥♥           ♥♥♥♥♥♥♥♥♥♥          
        ♥♥♥♥♥♥♥♥♥♥♥♥♥♥       ♥♥♥♥♥♥♥♥♥♥♥♥♥♥        
      ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥      
     ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥     
     ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥ ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥     
    ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥    
   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   
   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥  
   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   
   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   
   ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥   
    ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥    
    ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥    
     ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥     
     ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥     
      ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥      
      ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥      
       ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥       
        ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥        
        ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥        
         ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥         
          ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥          
           ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥           
            ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥            
             ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥             
              ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥              
               ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥               
                 ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥                 
                  ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥                  
                   ♥♥♥♥♥♥♥♥♥♥♥♥♥                   
                     ♥♥♥♥♥♥♥♥♥                     
                      ♥♥♥♥♥♥♥                      
                        ♥♥♥                        
                         ♥                         

Quão?

Implementações: equaçãomais de uma grade de caracteres separada por feed de 51 por 51 linhas.

*3× - Link 1: y, xSquared
*3  - cube y
  × - multiply the result by xSquared

²+’*3<çị⁾*  - Link 2: y, xSquared
²           - square y
 +          - add xSquared to the result
  ’         - subtract one
   *3       - cube the result
     <      - less than? (1 if True, 0 if False)
      ç     -     the result of the last link (1) as a dyad: f(y, xSquared)
       ị    - index into (1-based):
        ⁾*  - the string "* " (there is a trailing space on this line)

       ×9829Ọ»⁶ - alternative ending of link 2
       ×9829    - multiply (vectorises) by 9829
            Ọ   - cast to character (vectorises) (9829 is the ♥, 0 is the null-byte)
             »  - maximum (vectorises) of that and:
              ⁶ -     space character (ordinal of space is 32, greater than the null-byte, less than ♥)

25µNr÷21µ²ç@þUY - Main link: no arguments
25              - 25
  µ             - monadic chain separation call that i
   N            - negate i
    r           - inclusive range(negated i, i) -> [-25, -24, ..., 24, 25]
     ÷21        - divide by 21 (vectorises) -> [-1.1904761904761905, -1.1428571428571428, ..., 1.1428571428571428, 1.1904761904761905]
        µ       - monadic chain separation call that r
         ²      - square r (vectorises) (make the xSquared values, left to right)
             U  - upend r (make the y values, top to bottom)
            þ   - outer product using:
          ç@    -     last link (2) as a dyad with reversed arguments: f(y, xSquared)
              Y - join with line feeds
                - implicit print
Jonathan Allan
fonte
5

JavaScript (ES6), 151 147 bytes

document.write`<canvas id=c>`;for(i=0;x=2-i/24,i<97;i++)for(j=0;y=2-j/24,z=x*x+y*y-1,j<97;j++)z*z*z-x*x*y*y*y<0&&c.getContext`2d`.fillRect(i,j,1,1)

Editar: salvou 4 bytes graças a @ user2428118. Versão do ES7 para 143 bytes:

document.write`<canvas id=c>`;for(i=0;i<97;i++)for(x=2-i/24,j=0;j<97;j++)x*x*(y=2-j/24)**3-(x*x+y*y-1)**3>0&&c.getContext`2d`.fillRect(i,j,1,1)

Neil
fonte
que tal em y**3vez de y*y*y?
Svarog
1
@svarog Assim minha nota "Seria um pouco mais curto em ES7" ...
Neil
bem, funciona no cromo 55, então por que não adicionar uma versão es7?
Svarog
1
@svarog Porque eu não tenho cromo 55 calhar ...
Neil
1
@ThisSuitIsBlackNot Reclamou de variáveis ​​não declaradas quando tentei.
Neil
4

BBC BASIC, 80

Terminará o golfe amanhã.

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

ORIGIN99,99F.u=-56TO56x=u/50b=x^2^.33/2r=(b^2-x^2+1)^.5*50L.u,b*50-r,u,r+b*50N.

Desenha um coração cheio usando a primeira equação, que reorganizamos e obtemos a raiz do cubo (existem 3 raízes de cubo de um número real, uma real e duas complexas, mas só estamos interessados ​​na raiz real aqui.) Em seguida, reorganizamos novamente para obter um quadrático em y

x^2+y^2-1=(x^0.66)y

y^2-(x^0.66)y+x^2-1=0

Usando a fórmula quadrática padrão para expressões do tipo ay^2+by+c=0e aproveitando o fato de que a= 1 obtemos

y = -b/2 +/- sqrt((b/2)^2-c)

y = -b/2 +/- sqrt((b/2)^2-x^2+1)

onde -b/2 = (x^0.66)/2(representado por bno programa.)

Simplesmente digitalizamos os valores da xesquerda para a direita, desenhando uma linha vertical entre cada par de valores válidos para ycriar uma forma sólida.

ORIGIN99,99F.u=-56TO56x=u/50b=x^2^.33/2r=(b^2-x^2+1)^.5*50L.u,b*50-r,u,r+b*50N.

destroçado

ORIGIN99,99
FORu=-56TO56
  x=u/50
  b=x^2^.33/2
  r=(b^2-x^2+1)^.5*50
  LINEu,b*50+r,u,b*50-r
NEXT
Level River St
fonte
4

Ruby, 80 bytes

Mostre a Ruby um pouco de amor.

-2.step(2,0.2){|y|-2.step(2,0.1){|x|$><<'. O'[(y*y-1+x*=x)**3+x*y**3<=>0]};puts}

Resultado:

         OOOOO     OOOOO             
      .OOOOOOOOO.OOOOOOOOO.          
     OOOOOOOOOOOOOOOOOOOOOOO         
     OOOOOOOOOOOOOOOOOOOOOOO         
     OOOOOOOOOOOOOOOOOOOOOOO         
      OOOOOOOOOOOOOOOOOOOOO          
      .OOOOOOOOOOOOOOOOOOO.          
        OOOOOOOOOOOOOOOOO            
         OOOOOOOOOOOOOOO             
           OOOOOOOOOOO               
              OOOOO                  
                .                    

com algumas linhas vazias acima e abaixo

GB
fonte
2

Processing.js: 123 119 bytes

ungolfed:

t = 0; 

void setup() {
    size(99, 300); 
} 

void draw() {
    point(59+99*sin(t)*cos(t)*log(t),350-400*sqrt(cos(t))*pow(t,0.3));
    t+=0.01;
}

golfed:

t=0;void setup(){size(99,300);}void draw(){point(59+99*sin(t)*cos(t)*log(t),350-400*sqrt(cos(t))*pow(t,0.3));t+=0.01;}

este é bastante barato, pois representa # 2 de 0 ao infinito, em vez de -1 a 1, como mostrado na figura, para economizar nos dois abdominais (t). Mas é tecnicamente correto, pois há mais de 100 pontos.


130 bytes "mais corretos"

t=-1;void setup(){size(99,300);}void draw(){point(59+99*sin(t)*cos(t)*log(abs(t)),350-400*sqrt(cos(t))*pow(abs(t),0.3));t+=0.01;}

experimente online

nota: provavelmente existe uma maneira de obter 100 pontos na tela 100x100 padrão e reduzir a configuração.

satibel
fonte
Nenhum dos seus trechos fazer nada por mim na minha versão local do processamento (exceto para o segundo, que apenas desenha 1 ponto)
Kritixi Lithos
você já tentou no bloco de desenho? ( "experimentá-lo on-line"), você precisa clicar em "tornar sketch"
satibel
Mas acho que seria chamado "Processing.JS". Para o trecho de trabalhar para mim, você tem que usar floatem vez deint
Kritixi Lithos
oops, esqueci o .js, e graças a isso eu salvei 4 bytes removendo o int inútil.
satibel
2

TI-84 Basic, 40 38 bytes

Semelhante à resposta e saída do @ 12Me21, mas para a série TI-83/84.

While 1:2rand-1→A:2rand-1:If (A²+Ans²-1)³>A²Ans³:Pt-On(A,Ans:End
Timtech
fonte
O uso do Ans é realmente menor aqui? Eu pensei que Ans tinha 2 bytes.
12Me21
@ 12Me21 Não, é do mesmo tamanho e é mais rápido também. (Para a TI-83/84, pelo menos, não conheço a TI-80).
Timtech
1

BBC BASIC (BBC Micro) (126 bytes)

Essa é uma variação da resposta da Level River Street , mas para a iteração original da BBC Micro da BBC BASIC.

Você pode copiar e colar qualquer um dos seguintes itens na nova funcionalidade de colagem do JSBeeb em https://bbc.godbolt.org/ (um emulador da BBC Micro com JavaScript), depois de colar, pressione Enter dentro da 'tela' para mostrar uma nova prompt, digite RUN e pressione Enter para executar qualquer versão.

golfed. (126 bytes)

1MO.1:V.29,64;64;:MOVE-57,20:GC.0,1:F.U=-56TO56:X=U/50:IFX<>0TH.B=X^2^.33/2
2R=(B^2-X^2+1)^.5*50:DRAWU,B*50+R:DRAW U,B*50-R:N.

não destruído. (176 bytes)

1 MODE 1
2 VDU 29,64;64;
3 MOVE -57,20
4 GCOL 0,1
5 FOR U = -56 TO 56
6 X = U/50
7 IF X <> 0 THEN B = X^2^.33/2
8 R = (B^2-X^2+1)^.5*50
9 DRAW U,B*50+R
10 DRAW U,B*50-R
11 NEXT

A linha 7 requer uma verificação de X, para evitar um erro "Log range" quando X se torna 0 no meio do loop. Fora isso, é praticamente o mesmo. É muito mais lento desenhar em uma máquina real, que o JSBeeb emula muito bem.

sassquad
fonte