Pour de nombreux jeux joués sur une grille, les hexagones sont le Clearly Superior Choice ™. Malheureusement, de nombreux sites d'art de jeux gratuits n'ont que des ensembles de tuiles sans couture pour les cartes carrées. Lors d'un projet précédent, j'ai utilisé certains d'entre eux et les ai convertis manuellement en hexagones.
Cependant , je suis devenu paresseux dans ma vieillesse. Il devrait être facile d'automatiser le processus avec un petit script.
Cependant , je suis devenu paresseux dans ma vieillesse. Je vous l'externalise et je le déguise en défi de golf de code 1 .
Contribution
L'entrée est une image carrée dans n'importe quel format d'image courant capable de couleur RVB 24 bits. Vous pouvez également prendre un nom de fichier en entrée au lieu des données d'image elles-mêmes.
Vous pouvez supposer que l'image est carrée et que la longueur du côté est un multiple de quatre.
Sortie
La sortie est la tuile d'entrée, mais convertie en hexagone (l'image elle-même sera carrée, avec des zones transparentes). Vous pouvez l'enregistrer dans un fichier ou l'afficher à l'écran.
Encore une fois, n'importe quel format d'image courant fera l'affaire. Si le format que vous utilisez prend en charge la transparence, les zones d'arrière-plan doivent être transparentes. Si ce n'est pas le cas, vous pouvez utiliser la couleur # FF00FF (cette horrible couleur fuchsia) comme stand-in.
Méthode
Alors comment le fait-on? La méthode que j'utilise 2 écrase l'image un peu verticalement, mais dans l'ensemble, elle semble assez bonne pour la plupart des choses. Nous allons faire un exemple avec cette image d'entrée:
- Échelle: redimensionne l'image à un rapport de 3: 2. Puisque nos images seront des carrés, cela signifie que vous les redimensionnez simplement à 75% de largeur et 50% de hauteur. Notre exemple d'entrée est 200x200, nous nous retrouvons donc avec cette image 150x100:
- Mosaïque: placez des copies de votre image à l'échelle dans une grille 2x2:
- Crop: prenez un hexagone de taille appropriée de n'importe où dans cette grille 2x2. Maintenant, pour faciliter le carrelage, cet hexagone n'est pas exactement régulier. Après avoir recadré un carré de la taille d'origine (ici 200x200), vous recadrez ensuite les coins. Les lignes de recadrage doivent s'étendre (à peu près) du centre de chaque côté gauche / droit à un quart du bord en haut / en bas:
Et c'est votre sortie!
Voici un exemple de ce à quoi cela pourrait ressembler une fois carrelé (zoomé ici):
C'est le golf de code, donc le code le plus court en octets gagne. Des échappatoires standard s'appliquent, etc., etc.
1 N'hésitez pas à le croire ou non.
2 Méthode 1 de ce site utile.
Réponses:
Matlab,
223 215 209 184163 octetsLe rééchelonnement est assez simple. Pour recadrer les coins, je superpose un système de coordonnées sur les pixels et crée un masque via quatre inégalités linéaires, qui déterminent la zone de l'hexagone.
PS: Cela s'est transformé en un jeu de codegolf nim avec la soumission de @ MartinBüttner: Vous devez alternativement raccourcir votre code (tout en fournissant les mêmes fonctionnalités) - celui qui peut faire gagner le dernier `` raccourcissement '' =)
la source
[k.*[2 3]/4]
.Mathematica,
231211209208201 201188173 octetsIl s'agit d'une fonction sans nom qui prend un objet image et renvoie un objet image:
Je ne pense pas qu'il y ait beaucoup à expliquer ici, mais quelques détails qui sont à noter:
ImageAssemble[{{#,#},{#,#}}]
, c.-à-d.ImageAssemble
une matrice 2x2 avec des copies de l'image. Cependant, il y aImageCollage
une sorte de fonction magique qui essaie d'organiser un tas d'images aussi bien que possible (quoi que cela signifie ... vous pouvez même donner des poids et des trucs aux images individuelles). Quoi qu'il en soit, si vous lui donnez quatre images de taille égale et avec des poids égaux (ou aucun), il les organisera également dans une grille 2x2. Cela me permet de sauvegarder quelques octets pour l'imbrication de la matrice, ainsi que le nom de la fonction.Graphics
. J'utilise la fonction intégréeRegularPolygon@6
, mais applique un rapport d'aspect de1
pour l'étirer si nécessaire. Malheureusement, il aGraphics
besoin de quelques options coûteuses pour éviter le rembourrage et autres, et il rend également le noir sur blanc au lieu du contraire. Le résultat est fixé avecColorNegate
puis attaché aux canaux d'origine de l'image avecSetAlphaChannel
.Graphics
met une petite quantité de rembourrage autour de l'hexagone, mais nous voulons que l'hexagone alpha couvre toute la taille de la découpe. cependant,SetAlphaChannel
peut combiner des images de différentes tailles, en les centrant les unes sur les autres et en les recadrant à la plus petite taille. Cela signifie qu'au lieu de définir manuellementPlotRangePadding->0
, nous pouvons simplement augmenter un peu l'image hexagonale avecImageSize->1.05e
(et nous avons quand même besoin de l'option `ImageSize).la source
HTML5 + Javascript, 562 octets
Prend la saisie comme URL d'image via la zone de texte (l'URL, espérons-le, compte comme nom de fichier). Sort les données sur le canevas.
Version qui fonctionne sur tous les navigateurs (580 octets):
Testez-le avec l'image "blocs" antérieure via cette URL: http://i.stack.imgur.com/gQAZh.png
la source
id=A
à<form>
etid=B
à<canvas>
, puis en remplaçantl[0]
parA
etl[1]
avecB
et en supprimantl=document.body.children;
. (Fonctionne dans Firefox 41; je ne sais pas quels autres navigateurs prennent en charge cela.) De plus, je pense qu'il y a quelques points-virgules inutiles à côté des crochets droits et quelques espaces supplémentaires.id=C
à<input>
, puis remplacere.target.children[0]
parC
.0.75
est égal à3/4
,1/0.75
est égal à4/3
,d/4+d/2
est égal àd*3/4
et les zéros non significatifs sur les autres décimales ne sont pas nécessaires. Je crois également que vous pourriez remplacer le premierc.drawImage
parc[p="drawImage"]
, puis tous les suivants parc[p]
; vous pourriez faire de même avecc.lineTo
.Python 2 + PIL, 320
Lit le nom du fichier image depuis stdin.
la source
PIL
je n'avais pas à portée de main pour essayer et je n'y pensais pas assez. Je maintiens cependant ma déclaration de nouvelle ligne: PPHP, 293 octets
J'ai ajouté quelques nouvelles lignes pour la lisibilité:
Voici la version non golfée:
la source