Je viens de terminer la lecture du dernier Pour la science.

J’ai découvert par hasard un article qui me concerne indirectement c’est-à-dire par le travail que j’ai effectué récemment : un algorithme pour vectoriser une image.

L’article parle de cellules (points) dans un espace réseau à dimensions triangulaire, carrée ou cubique. Dans le traitement d’images la dimension est cubique. En traçant par chaque points des connexions de proximité voisinage, en éliminant des artefacts au fur et à mesure, on obtient (ou non) des segments de longueurs optimales (par exemple 1/10 de la largeur image pour un portrait).

J’ai travaillé là-dessus jusqu’au mois de mai 2021, dans des conditions assez dures.

https://github.com/manuelddahmen/Medium-Python-Neural-Network/blob/master/urlscraping.py

Regarder

La version 0 entoure les points (sur les i, les )

L’attribut alt de cette image est vide, son nom de fichier est image-1024x576.png.

Je voudrais présenter ici un modèle Java de meshs “à quadrilatères quadrillés”, matrice n x m et dessin en double triangles ou approximation dessin quadrilatères 3D.

package one.empty3.library;

import one.empty3.library.core.nurbs.SurfaceParametriquePolynomiale;

public class Polygons extends SurfaceParametriquePolynomiale {
    @Override
    public Point3D calculerPoint3D(double u, double v) {
        try {
            int indexU0 = (int) (u * coefficients.getData2d().get(0).size());
            int indexV0 = (int) (v * coefficients.getData2d().size());
            if (indexU0 > coefficients.getData2d().get(0).size() - 1) {
                indexU0 = coefficients.getData2d().get(0).size() - 1;
            }
            if (indexV0 > coefficients.getData2d().size() - 1) {
                indexV0 = coefficients.getData2d().size() - 1;
            }
            int indexU1 = (int) (indexU0 + 1.);
            int indexV1 = (int) (indexV0 + 1.);
            if (indexU1 > coefficients.getData2d().get(0).size() - 1) {
                indexU1 = coefficients.getData2d().get(0).size() - 1;
            }
            if (indexV1 > coefficients.getData2d().size() - 1) {
                indexV1 = coefficients.getData2d().size() - 1;
            }
            Point3D[] points = new Point3D[]{
                    coefficients.getElem(indexU0, indexV0), coefficients.getElem(indexU1, indexV0),
                    coefficients.getElem(indexU1, indexV1), coefficients.getElem(indexU0, indexV1)
            };
            double U = u * (coefficients.getData2d().get(0).size()) - indexU0;
            double V = v * (coefficients.getData2d().size()) - indexV0;
            assert U>=0 && U<=1 && V>=0 && V<=1;
            Point3D pUv0 = points[0].plus(points[1].moins(points[0]).mult(U));
            Point3D pUv1 = points[3].plus(points[2].moins(points[3]).mult(U));
            Point3D pU0v = points[3].moins(points[0]).mult(V);
            Point3D pU1v = points[3].moins(points[2]).mult(V);
            return pUv0.plus(pUv1.moins(pUv0).mult(V)); // Discutable
        } catch (NullPointerException ex) {
            ex.printStackTrace();
        }
        return null;
    }
}
Please follow and like us:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

RSS
Follow by Email
YouTube
YouTube
Pinterest
Pinterest
fb-share-icon
LinkedIn
Share
Instagram
Weibo
WeChat
WhatsApp
Snapchat
Reddit
FbMessenger
Tiktok
Mastodon