Journal Que nous cache-t-on ? (version PDF)

Posté par  . Licence CC By‑SA.
Étiquettes :
11
20
sept.
2023

Salut 'Nal,

Ayant appris ici même certaines vérités sur le site de référence des moules, je profite de ce que Linuxfr permet en ce moment de dénoncer grave.

Ce billet de blog en anglais dévoile la manipulation à l'œuvre dans les fichiers PDF : les cercles sont faux, ce sont des approximations à base de courbes de Bézier !

Mais bon comme ce billet précise aussi que la vision humaine ne supporte pas les cercles parfaits et les perçoit légèrement allongés verticalement, la révolution n'est pas pour tout de suite.

  • # Précision

    Posté par  . Évalué à 6.

    Dans le détail, le cercle ne fait simplement pas partie des primitives de dessin définies dans les spécifications du format.

    Mais comme par hasard, les disques eux sont implémentés.
    Je dis ça, je dis rien…

  • # Méconnaissance du monde industriel ?

    Posté par  . Évalué à 7.

    If you have any component where getting a really accurate circle shape is vital (like pistons and their holes), suddenly all your components are slightly misshaped.

    Heureusement aucun machiniste digne de ce nom utilise la sortie d'un PDF pour programmer sa machine outil. Peut-être dans le monde du hobby (impression 3D et autre) est-ce le cas?

  • # Inkscape

    Posté par  (site web personnel) . Évalué à 7. Dernière modification le 20 septembre 2023 à 09:51.

    SVG a, lui, une primitive pour les cercles. Du coup j'ai essayé un truc avec Inksape :

    1. j'ai tracé un cercle ;
    2. je l'ai copié ;
    3. j'en ai converti une version en chemin, ce qui donne un chemin fermé constitué de quatre courbes de Bézier, c'est à dire l'approximation classique d'un cercle ;
    4. je les ai mis l'un par-dessus l'autre, chacun d'une couleur différente.

    Eh bien, même en zoomant énormément, on ne vois pas de différence. Que nous chache-t-on ? Est-ce que le rendu du SVG à l'écran par Inkscape approximerait lui aussi les cercles par des courbes de Bézier ?

    • [^] # Re: Inkscape

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      Inkscape (et SVG) ne suit (sont) pas la norme/spécification PDF… Le souci semble être seulement avec ce Putain De Format ;)

      “It is seldom that liberty of any kind is lost all at once.” ― David Hume

    • [^] # Re: Inkscape

      Posté par  (site web personnel) . Évalué à 4.

      J’ai fais presque la même chose…

      Je me dis par contre que le Cercle dans Inkscape est probablement discrètement converti en Chemin (courbe de Bézier)… Donc la différence entre un Cercle dans Inkscape et sa conversion en Chemin est en réalité identique.

      Pour m’en assurer, j’ai fais deux Cercles , converti l’un en Chemin, exporté en PDF, converti en PS et voici le résultat :

      2736.37 6109.02 m
      2736.37 5795.89 2482.54 5542.06 2169.41 5542.06 c
      1856.33 5542.06 1602.5 5795.89 1602.5 6109.02 c
      1602.5 6422.1 1856.33 6675.93 2169.41 6675.93 c
      2482.54 6675.93 2736.37 6422.1 2736.37 6109.02 c
      h
      2736.37 6109.02 m
      S
      2736.37 6109.02 m
      2736.37 5795.89 2482.54 5542.06 2169.41 5542.06 c
      1856.33 5542.06 1602.5 5795.89 1602.5 6109.02 c
      1602.5 6422.1 1856.33 6675.93 2169.41 6675.93 c
      2482.54 6675.93 2736.37 6422.1 2736.37 6109.02 c
      h

      ↑ identiques.

      Donc nouvelle expérience, avec un Étoile de 360 branches (quand-même… → 720 points Bézier) comparée à un Chemin (4 points Bézier donc)…

      Et là, quelle ne fut pas ma surprise…

      Titre de l'image

      (cercle_vs_bezier.svgcercle_vs_bezier.pdf

      Hum… Qu’en pensez-vous ?

      • [^] # Re: Inkscape

        Posté par  (site web personnel) . Évalué à 5.

        Je me dis par contre que le Cercle dans Inkscape est probablement discrètement converti en Chemin (courbe de Bézier)… Donc la différence entre un Cercle dans Inkscape et sa conversion en Chemin est en réalité identique.

        Tant qu'on reste en SVG, sûrement pas. La spécification SVG prévoit des primitives pour les cercles, ellipses et arcs de cercle ou d'ellipse, et Inkscape respecte cela, fort heureusement. C'est ce qui permet de continuer à travailler sur un cercle, à agir sur son rayon, à en faire un arc, etc.

    • [^] # Re: Inkscape

      Posté par  (site web personnel) . Évalué à 10.

      Bon, en fait je crois avoir trouvé la réponse : l'approximation classique d'un cercle par quatre courbes de Béziers quadratiques est déjà excellente, l'erreur maximale en rayon étant d'environ 0,000.27. Moins de 3 pour 10.000. Ce niveau d'erreur est invisible, même en zoomant énormément. C'est sans doute cette approximation qui est utilisée par Inkscape pour convertir un cercle en chemin à la demande, et lorsqu'il exporte en PDF.

      Depuis, on a trouvé une meilleure approximation, qui donne une erreur d'environ 0,000.2. On y perd le fait que le milieu des courbes de Béziers soient sur le cercle, contrainte utilisée classiquement pour déterminer directement les paramètres des courbes. Là, on doit avoir recours à une optimisation.

      Et enfin, quelqu'un a trouvé une meilleur approximation encore, en supprimant encore une contrainte, celle d'utiliser ce que j'appellerais les points cardinaux du cercle comme extrémités des courbes de Béziers. Résultat, une erreur d'environ 0,000.057. Moins de 6 pour 100.000. Si on veut tailler des roues avec une machine de découpe qui mange du PDF, je suggérerais de procéder ainsi : sur une roue d'un mètre de diamètre, l'erreur est de 28 microns, sans doute inférieure à la précision de découpe, surtout pour un objet qu'on poncera avant de l'utiliser.

      Source : https://spencermortensen.com/articles/bezier-circle/

      • [^] # Re: Inkscape

        Posté par  (site web personnel, Mastodon) . Évalué à 3.

        Ah… c’est donc cela. Merci pour le fin mot de l’histoire.

        “It is seldom that liberty of any kind is lost all at once.” ― David Hume

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.