2017-10-17 15 views
2

Le plan consiste à tracer la phase d'une fonction complexe 2D à l'aide de la carte pm3d et d'une palette de couleurs répétée d'une manière continue. Pour être plus précis, la palette n'est définie que sur [-pi, pi], alors que la phase elle-même pourrait sortir de cette plage. La palette de couleurs doit répéter pour ces valeurs.Gnuplot: Répétition de la palette pm3d en dehors de la plage

Ma tentative actuelle consistait à forcer la fonction à rester à l'intérieur de la plage et à recommencer depuis l'autre côté lorsque l'on franchissait une frontière en soustrayant ou en ajoutant des multiples de 2 * pi. Cela a cependant entraîné des artefacts chaque fois qu'un tel saut de phase s'est produit dans la fonction. Notez les pixels anneaux bleu-ish dans la parcelle:

Phaseplot

Ce fut le code utilisé pour générer cette parcelle:

set pm3d map 
    set palette model HSV defined (0 0 1 1, 1 1 1 1) 
    set samples 100; set isosamples 100 

    set xrange [-4:4] 
    set yrange [-4:4] 
    set cbrange [-pi:pi] 

    set cblabel "Phase" 

    phaseCont(u,v) = 2*pi* ((u/4)**2 + (v/4)**2) 
    phaseClip(u,v) = phaseCont(u,v) - (floor(phaseCont(u,v)/(2*pi) + 0.5) * 2*pi) 

    set terminal png 
    set output "phaseplot.png" 

    splot phaseClip(x,y) with pm3d 

    unset output 

Il est logique les artefacts apparaissent comme interpolation arrive, mais il est pas ce que je vais faire, bien sûr.

Existe-t-il un moyen de créer de superbes diagrammes 2D avec des motifs de couleur répétés?

+0

Les artefacts apparaissent car par défaut pm3d interpole entre les quatre coins d'un quadrilatère. Vous pouvez supprimer ceci avec, par exemple, 'set pm3d corners2color c1'. Je ne saurais pas comment faire autrement. – Christoph

+0

Oui, c'est ce que je pensais que ça venait. Et merci pour le conseil génial avec corners2color, qui a eu l'effet désiré! Pourriez-vous s'il vous plaît signaler ce commentaire comme une réponse afin que je puisse marquer comme réponse correcte? – JCh3ss

Répondre

1

Gnuplot ne peut pas définir des palettes de couleurs répétitives infinies. Dans votre cas, l'interpolation perturbatrice provient de l'interpolation par défaut pm3d, qui calcule la moyenne des quatre coins pour déterminer la couleur (voir show pm3d). Pour éviter ce type d'interpolation, utilisez par ex.

set pm3d corners2color c1 

pour déterminer la couleur d'un seul coin. Surtout dans votre cas qui ne devrait pas d'importance, parce que vous pouvez toujours augmenter l'échantillonnage de votre fonction pour obtenir des résultats plus lisses:

set pm3d map 
set palette model HSV defined (0 0 1 1, 1 1 1 1) 
set samples 500; set isosamples 500 

set xrange [-4:4] 
set yrange [-4:4] 
set cbrange [-pi:pi] 
set pm3d corners2color c1 

set cblabel "Phase" 

phaseCont(u,v) = 2*pi* ((u/4)**2 + (v/4)**2) 
phaseClip(u,v) = phaseCont(u,v) - (floor(phaseCont(u,v)/(2*pi) + 0.5) * 2*pi) 

set terminal pngcairo 
set output "phaseplot.png" 

splot phaseClip(x,y) with pm3d 

enter image description here