Dibujar / trazar un gráfico de corazón


45

Su desafío es dibujar / trazar uno de los corazones a continuación. El tamaño debe ser de al menos 50x50 píxeles (los gráficos vectoriales están bien). Puedes elegir cuál de los corazones quieres dibujar / trazar. Se aceptan ejes, líneas de cuadrícula, etc. Debe haber al menos 100 coordenadas / puntos distintos en el gráfico. El corazón puede llenarse de color si quieres.

ingrese la descripción de la imagen aquí

Las ecuaciones son:

ingrese la descripción de la imagen aquí

o

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

tEstá en el rango [-1, 1].

o

ingrese la descripción de la imagen aquí

o

ingrese la descripción de la imagen aquí

Este es el por lo que gana el código más corto (en cada idioma) en bytes. Proporcione la salida (o enlace a un intérprete en línea).

Respuestas:


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

ingrese la descripción de la imagen aquí

Esto tomó un tiempo, y mi batería está baja, así que no quería seguir.

Intenté usar la segunda ecuación, pero no pude hacer que funcionara, en realidad resultó ser más larga, así que simplemente adapté la otra respuesta que tenía.

EDITAR: Acabo de notar el requisito de 50x50 píxeles, desafortunadamente la pantalla tiene solo 47 píxeles de altura, por lo que esto no es posible.


1
creativo de verdad!
dalearn

8
Ha sido un tiempo, pero se puede sustituir IF (X²+ANS²-1)³-X²ANS³<0con IF (X²+ANS²-1)³<X²ANS³?
wchargin

¡Oh, no puedo creer que no haya pensado en eso! gracias
12Me21

45

Perl, 86 bytes

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

Corre con perl -E.

Traza un corazón ASCII lleno, usando la primera ecuación. Tenga en cuenta que el eje x se estira por un factor de ~ 1.265: esto es para contrarrestar el hecho de que las fuentes de terminal suelen ser mucho más grandes verticalmente que horizontalmente.

Salida:

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

Explicación (ya que OP lo solicitó):

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

Esta es simplemente la primera ecuación, ligeramente reorganizada para acortarla. $ y representa directamente la y en la fórmula. $ _ es inicialmente proporcional a x, pero se asigna múltiples veces consigo mismo ( $_*=$_/1e3), por lo que es proporcional a x². Como x² se usa dos veces en la fórmula, esto ahorra algunos bytes.

1e3significa 1000, y fue elegido porque es corto y el resultado se ve bien. ** es el operador de energía de Perl. Lo uso >0más que ==0porque quiero un corazón lleno.

flip_flop := $|--?v60:3

v60 es un abuso de la sintaxis de cadena de versión arcaica para denotar el carácter con el código ASCII 60: '<'.

$ | es una variable mágica que solo puede ser 0 o 1. Disminuir cuando ya es 0 lo establece en 1. Disminuir cuando es 1 lo establece naturalmente en 0. Por lo tanto, $ | - a menudo se usa como flip-flop: cada vez se evalúa, alterna entre verdadero y falso.

En conjunto, esta expresión devuelve alternativamente '<' y 3.

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

Terrarios anidados. Si la condición es falsa (→ estamos fuera del corazón), se evalúa como $ ", que es una variable mágica que por defecto es" "(un solo espacio). Si la condición es verdadera (→ estamos dentro del corazón), evalúa flip_flop.

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

Evalúa inner_loop repetidamente, con $ _ (variable "predeterminada" de Perl) de -40 a 40, en incrementos de 1. Recopila los resultados de esas evaluaciones en una lista temporal, luego los imprime todos, concatenados, terminando con una nueva línea .

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

Esto ejecuta external_loop repetidamente, con $ y pasando de 1.24 (1 - (-6 / 25)) a -1 (1 - 50/25), en decrementos de 0.04.

Tenga en cuenta que y se divide por 25, mientras que x² se divide por 1000, que es lo mismo que dividir x por sqrt (1000). El factor ~ 1.265 que mencioné es sqrt (1000) / 25.


55
Huh, supongo que no viola ninguna regla ... Mi favorita hasta ahora :) Sin embargo, me encantaría una explicación :)
Stewie Griffin

1
Estoy confundido acerca de algo. ¿Por qué usar? V60 sobre, decir, "<"?
Nic Hartley

Misma longitud, pero más fácil de escribir.
Grimmy

Un corazón hecho de corazones.
TheWanderer

34

Mathematica WolframAlpha, 17 15 13 11 bytes

Afeitado de 2 bytes gracias a Martin Ender (primera curva del corazón -> curva del corazón 1)

Afeitado otros 2 bytes gracias a Martin Ender (heart curve 1 -> heartcurve1)

Esto probablemente sea trampa (la solución obvia), pero aquí va.

heartcurve1

Pruébalo aquí!

Estoy seguro de que hay una forma de acortar primero, corazón o curva de tal manera que Wolfram todavía lo acepta. Bueno, ahora está libre de espacios, ¿tal vez alguna abreviatura de corazón?

¿Recibo puntos de bonificación por trazar 2 de ellos?

heartcurves

¡Intenta eso aquí!


55
heart curve 1
Martin Ender

66
En realidad, heartcurve1funciona.
Martin Ender

23
@MartinEnder Qué en el mundo
Thunda

1
Sin embargo, la primera de las curvas cardíacas se parece más a un trasero
Mikhail V

@MikhailV 0th heartcurve (cardoide) parece un trasero.
Thunda

29

Mathematica, 52 bytes

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

ingrese la descripción de la imagen aquí

Podríamos guardar un byte más con, ContourPlotpero luego el fondo se vuelve un poco extraño:

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

ingrese la descripción de la imagen aquí

Para un byte adicional podríamos usar la cuarta fórmula y en su PolarPlotlugar:

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

ingrese la descripción de la imagen aquí


23
"Un poco trivial" es un eufemismo ...
Mego

ContourPlot desencadena tanto el TOC. Aaaaaah! : D
KeyWeeUsr

25

Casio fx-7700GH, 21 bytes

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

La función de gráfico sin nombre se ingresará en una de las ranuras de función de gráfico de coordenadas polares, luego hace lo que dice en la lata.

El rango de gráficos debe establecerse manualmente (a menos que se ajuste al rango establecido actual), lo configuro a Xmin=-2.75, Xmax=2.75, Ymin=-4, Ymax=1.

Debería funcionar también en otras calculadoras de la serie gráfica Casio Power, y muy posiblemente en las calculadoras gráficas Casio posteriores.

Un corazón dibujado por una calculadora Casio fx-7700GH ( Sí, soy bastante viejo y polvoriento)


18

MATLAB / Octave, 31 bytes

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

ingrese la descripción de la imagen aquí


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.

ingrese la descripción de la imagen aquí


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

podría usar en xxlugar dex^2
12Me21

@ 12Me21, ¡oh, eso es excelente, gracias!
Daniel

Su recuento de bytes es incorrecto, tiene una nueva línea adicional.
Rɪᴋᴇʀ

@Riker, no veo cómo está mal. ¿Dónde hay una nueva línea?
Daniel

imgur.com/a/4eTyt V2 es de 14 bytes
Rɪᴋᴇʀ


7

Python, 119116 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

Pruébalo en línea

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

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


6

SageMath, 66 bytes

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

Pruébalo en línea

Desafortunadamente, los nombres largos de implicit_ploty parametric_plot(más la necesidad de definir una variable diferente a la definida implícitamente xpara la primera) hacen que las tres primeras opciones sean demasiado largas para ser consideradas.

Gracias a busukxuan y Andrea Lazzarotto por un byte


1
¿ ^.5Funciona en lugar de **.5?
busukxuan

1
@busukxuan Nope. Sage está construido en Python y ^es XOR.
Mego

1
Pero sabio sustituye ^con **. Me preguntaba si era porque no podría sustituir correctamente si fuera seguido de un.
busukxuan

@busukxuan Sage usa la notación de poder de Python ( **). Si intentara usar ^, terminaría con una advertencia y un resultado incorrecto.
Mego

1
@AndreaLazzarotto Entonces aparentemente mi memoria es defectuosa. Gracias.
Mego

6

C, 137133 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

Gracias @AlbertRenshaw, también cambié los 100 a 99 por 2 bytes más


1
+1; Me gusta el uso de vpara la función, buen estilo. Puede reducir dos bytes reemplazando 4000con 4e3y reemplazando 0.001con1e-3
Albert Renshaw

6

Jalea , 31 bytes

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

Pruébalo en línea!

o 35 bytes con a , en lugar de *relleno: cambie la línea media a ²+’*3<ç×9829Ọ»⁶.

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

¿Cómo?

Implementos: ecuaciónmás de una cuadrícula de caracteres separada por avance de línea de 51 por 51.

*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

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: Guardado 4 bytes gracias a @ user2428118. Versión 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)


¿qué tal en y**3lugar de y*y*y?
svarog

1
@svarog Por lo tanto, mi nota "Sería un poco más corta en ES7" ...
Neil

bueno, funciona en chromium 55, entonces ¿por qué no agregar una versión es7?
svarog

1
@svarog Porque no tengo cromo 55 a mano ...
Neil

1
@ThisSuitIsBlackNot Se quejó de variables no declaradas cuando lo intenté.
Neil

4

BBC BASIC, 80

Terminará de jugar golf mañana.

Descargue el intérprete en 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.

Dibuja un corazón lleno usando la primera ecuación, que reorganizamos y tomamos la raíz cúbica de (hay 3 raíces cúbicas de un número real, una real y 2 compleja, pero solo nos interesa la raíz real aquí). obtener un cuadrático en y

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

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

Usando la fórmula cuadrática estándar para expresiones del tipo ay^2+by+c=0, y aprovechando el hecho de que a= 1 obtenemos

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

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

donde -b/2 = (x^0.66)/2(representado por ben el programa).

Simplemente escaneamos los valores de xizquierda a derecha, dibujando una línea vertical entre cada par de valores válidos para yconstruir una 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.

sin golf

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

4

Rubí, 80 bytes.

Muéstrale algo de amor a Ruby.

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

Salida:

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

con algunas líneas vacías arriba y abajo


2

Processing.js: 123 119 bytes

sin golf:

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

golfizado:

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 es bastante engañoso, ya que traza el # 2 de 0 a infinito en lugar de -1 a 1 como se muestra en la imagen para guardar en los dos abdominales (t). Pero es técnicamente correcto ya que hay más de 100 puntos.


130 bytes "más correcto"

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

pruébalo en línea

nota: probablemente haya una manera de obtener 100 puntos en el lienzo predeterminado de 100x100 y eliminar la configuración.


Ninguno de sus fragmentos hace nada por mí en mi versión local de Processing (excepto el segundo que solo dibuja 1 punto)
Kritixi Lithos

¿Has probado en el bloc de dibujo? ("pruébelo en línea") debe hacer clic en "renderizar boceto"
satibel

Pero creo que eso se llamaría "Processing.JS" en su lugar. Para que el fragmento funcione para mí, debes usarlo en floatlugar deint
Kritixi Lithos

Ups, olvidé el .js, y gracias a eso ahorré 4 bytes eliminando el inútil int.
satibel

2

TI-84 Basic, 40 38 bytes

Similar a la respuesta y salida de @ 12Me21, pero para la serie TI-83/84 en su lugar.

While 1:2rand-1→A:2rand-1:If (A²+Ans²-1)³>A²Ans³:Pt-On(A,Ans:End

¿Usar Ans es realmente más pequeño aquí? Pensé que Ans tenía 2 bytes.
12Me21

@ 12Me21 No, es del mismo tamaño y más rápido también. (Para TI-83/84 al menos, no sé acerca de TI-80).
Timtech

1

BBC BASIC (BBC Micro) (126 bytes)

Esta es una variación de la respuesta de Level River Street , pero para la iteración original de BBC Micro de BBC BASIC.

Puede copiar y pegar cualquiera de los siguientes en la nueva funcionalidad de pegado de JSBeeb en https://bbc.godbolt.org/ (Un emulador de BBC Micro con JavaScript), una vez que se haya pegado, presione Entrar dentro de la 'pantalla' para mostrar un nuevo , escriba RUN y luego presione Intro para ejecutar cualquiera de las versiones.

Golfizado. (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.

sin golf (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

La línea 7 requiere una verificación de X, para evitar un error de "Rango de registro" cuando X se convierte en 0 a mitad del ciclo. Aparte de esto, es más o menos lo mismo. Es mucho más lento dibujar en una máquina real, que JSBeeb emula bastante bien.

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.