










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.
Regarder
















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

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;
}
}