2010-05-15 10 views
2

Je me demandais s'il y avait un algorithme pour diviser une ligne en plusieurs lignes, de sorte que l'ensemble de lignes multiples qui en résulte s'intègre dans une forme au carré plutôt que dans une forme rectangulaire large. Permettez-moi de donner quelques exemples,ligne de texte scindée

Entrée: Salut, c'est une très longue ligne.

Sortie:
Salut c'est
vraiment
longue lignée

Entrée: abcdef

Sortie:
abc
def

Entrée: Ceci est vraiment tel looooooooooooooooooooong line.Ceci est t il finit.

Sortie:
C'est vraiment comme
looooooooooooooooooooong ligne
Ceci est la fin.

Si vous voyez dans les exemples ci-dessus, la ligne d'entrée s'inscrit dans un rectangle large. Mais la sortie correspond plus ou moins à une forme carrée. Essentiellement, ce qui doit être fait ici, c'est simplement compter le nombre de caractères dans la ligne, prendre la racine carrée de ce nombre. Puis placez le nombre de caractères racine carrée dans chaque ligne. Mais dans l'exemple ci-dessus, le fractionnement doit être fait en respectant les mots de passe au lieu des caractères. Existe-t-il un algorithme standard pour cela? Tous les exemples de code/pointeurs seraient appréciés!

+0

un carré est un rectangle. –

+0

Mais tous les rectangles ne sont pas carrés ;-). De toute façon, j'ai édité ma question maintenant. J'espère que c'est clair :-). – plys

Répondre

2

Comme vous l'avez observé, cela signifie essentiellement des lignes de rupture avec une largeur maximale de et, par opposition à une largeur maximale, ce qui est habituellement le cas. (Et votre exemple montre que ce n'est pas toujours possible si vous ne pouvez pas couper les mots.) TeX peut le faire (regardez la commande \parshape): son algorithme de rupture de ligne supporte des formes arbitraires (et la césure, aussi), et est considéré comme l'état de l'art. Donc, si vous voulez créer des carrés de manière sérieuse, vous devez absolument adapter l'algorithme de Knuth/Plass (http://defoe.sourceforge.net/folio/knuth-plass.html).