
Ta proposition se rapproche de ceci, non ?

Merci !
Voici déjà un premier résultat sans interpolation avec 36 points sur une ellipse complète et un échantilon de 1000 valeurs calculées
Je regarderai à faire mieux plus tard.

Mais dans cette façon de faire, il va y avoir un nombre fixe de points quelque soit la longueur de l'arc. Et il n'y a pas forcément de point sur les extremums.
Il faudrait presque toujours faire les calcul sur l'ellipse complète et extraire les points contenus sur l'arc...

Je voulais dire qu'il n'y a pas forcément de point "clé" sur les 4 "pointes" de l'ellipse (sur les rayons).
Pour la répartition des points une chose qui me semble importante par rapport à l'usage ici est que quelque soit la taille de la portion d'arc à traiter les points choisis se trouvent aux mêmes endroits pour une ellipse donnée.
Ceci afin de ne pas avoir deux formes complémentaires dans le dessin qui ne donneraient pas la même approximation parce qu'elles n'ont pas la même longueur d'arc.
C'est comme dans la vraie vie de l'atelier. Couper une pièce de bois à la côte précise n'a pas toujours d'intérêt, mais tout couper à la même taille, oui.
Exemple dans le cas suivant :

Sais-tu "détecter" les formes complémentaires ?
Oui et non.
Il y a juste que dans l'exemple donné, ma détection donnera naturellement la même ellipse pour les deux arcs.

C'est vrai que le résultat est étrangement décalé.
Voici le code à coller dans la console SketchUp pour afficher ces points :
a = 5.0
b = 3.0
def point_at_t(a, b, t)
Geom::Point3d.new(a * Math.cos(t), b * Math.sin(t))
end
def curvature_at_t(a, b, t)
(a * b) / Math.sqrt((a**2 * Math.sin(t)**2 + b**2 * Math.cos(t)**2)**3)
end
def point_at_dk(a, b, ts, dks, dk)
i = dks.find_index { |v| v >= dk }
point_at_t(a, b, ts[i])
end
ts = []
ks = []
# Compute curvatures
key_count = 1000
(0...key_count).each do |i|
t = 2 * Math::PI * i / key_count
ts << t
ks << curvature_at_t(a, b, t)
end
# Integrate
dks = ks.dup
(1...dks.length).each do |i|
dks[i] += dks[i - 1]
end
max = dks.max
dks.map! { |dk| dk / max }
# Draw points
point_count = 36
(0...point_count).each do |v|
kn = v / pint_count.to_f
Sketchup.active_model.entities.add_cpoint(point_at_dk(a, b, ts, dks, kn))
end

La meilleure façon d'avoir les extremums et une répartition homogène est surement d'appliquer ta proposition seulement sur 1/4 d'ellipse et de dupliquer les positions trouvées sur les 3 autres.

Voici un bout de code qui peut être copier coller dans la console de SketchUp.
Il permet de dessiner les points répartis suivant la courbure sur un quart d'ellipse en fonction des paramètres qu'on lui donne au début.
Je pense qu'ensuite on pourrait utiliser la méthode des 3 points proposée par Kentaro pour former les arc en calculant un point milieu à chaque arc.
def point_at_t(xradius, yradius, t)
Geom::Point3d.new(xradius * Math.cos(t), yradius * Math.sin(t))
end
def point_at_dk(xradius, yradius, ts, dks, dk)
point_at_t(xradius, yradius, ts[dks.find_index { |v| v >= dk }])
end
def curvature_at_t(xradius, yradius, t)
(xradius * yradius) / Math.sqrt((xradius**2 * Math.sin(t)**2 + yradius**2 * Math.cos(t)**2)**3)
end
xradius = 5.0
yradius = 3.0
key_count = 100
arc_count = 8
prompts = [ "xradius", "yradius", "key_count", "arc_count" ]
defaults = [ xradius, yradius, key_count, arc_count ]
xradius, yradius, key_count, arc_count = UI.inputbox(prompts, defaults, "Settings")
ts = []
ks = []
ps = []
# Compute curvature at key points
(0..key_count).each do |i|
t = Math::PI / 2 * i / key_count
ts << t
ks << curvature_at_t(xradius, yradius, t)
end
# Integrate
dks = ks.dup
(1...dks.length).each { |i| dks[i] += dks[i - 1] }
max = dks.max
dks.map! { |dk| dk / max }
# Clear model
Sketchup.active_model.entities.clear!
# Draw points
(0..arc_count).each do |v|
p = point_at_dk(xradius, yradius, ts, dks, v / arc_count.to_f)
ps << p
Sketchup.active_model.entities.add_cpoint(p)
end
SKETCHUP_CONSOLE.clear
puts "-----"
puts "xradius = #{xradius}"
puts "yradius = #{yradius}"
puts "key_count = #{key_count}"
puts "arc_count = #{arc_count}"
puts "-----"
i = 1
ps.each_cons(2) do |p1, p2|
puts "arc #{i} => start = (#{p1.x.to_f.round(1)}, #{p1.y.to_f.round(1)}) end = (#{p2.x.to_f.round(1)}, #{p2.y.to_f.round(1)})"
i += 1
end

David Marmilloud j'ai peut-être mal compris la base du raisonnement, mais comment ces deux premiers rayons peuvent-ils être égaux si les deux extrémités de l'arc sont sur l'ellipse ?

David Marmilloud mais la il est question d’export 2D. Si des surfacés doivent être exploitées il y au ra l’export 3D.

J'ai poussé l'essai commencé ici pour que ça recherche les arc de cercles avec le point central de la portion et la méthode à 3 points.
Il en sort ceci. On voit que lorsque l'ellipse s'aplatit, on s'éloigne de plus en plus du fait que les portions d'arc de cercle soient tangentes les unes aux autres.
Et des NaN apparaissent dans la recherche des centres d'arc parce que les 3 points sont quasiment alignés ...

Je ne comprends pas tout à la représentation graphique
Ce qui se dessine c'est les points début et fin de chaque arc et un trait pointillé qui les relie au centre de chaque arc.
J'ai voulu reproduire ce que David Marmilloud montre dans son dessin avec les rayons coïncidents.
d'où les NaN
Les NaN sont surtout au début (t = 0) où les arcs sont très courts et donc les points début, milieu et fin des arcs trop proche pour ne pas être vu comme alignés dans la précision possible.
Oui dans ce cas nul autre choix que de remplacer par un segment ou de retirer le point étape.
le centre du cercle approchant part à l'infini
Oui, il y aura aussi ce cas à l'autre bout.

Je sais même pas si c'est vraiment une question de simplicité, mais plus d'objectif.
En effet, j'ai l'impression que si toutes les portions d'arc de cercle sont tangentes 2 à deux, on s'éloigne plus de la forme de l'ellipse que si on ne l'est pas.
Le choix est donc : forme ou continuité. Et en même temps avec plus de points, ça répond forcément mieux aux critères ... mais s'éloigne d'une "simplicité" pour l'exploitation du résultat.
Et je rejoins Kentaro que de base SketchUp est merdique sur cette notion de continuité. C'est donc de toutes façons pas pire que la donnée source.

Jean-Claude Di Fazio les arcs de cercles, même s'ils ne sont pas parfaitement tangents les uns aux autres offrent une bien meilleure continuité que la suite de segments. Même imparfait, c'est forcément une courbe plus douce et c'est ça qui est désiré.
Si on veut des segments, il n'y a rien à calculer, parce que ici c'est la donnée source qui est comme ça dans SketchUp.

Jean-Claude Di Fazio Ce type de construction ne peut donner qu’un cercle ou une spirale.
Je suis pas d'accord avec ça. L'approximation en 3 cercles montre le contraire.
Il est certain que ce n'est forcément pas un ellipse, puisque c'est une approximation

Merci o314.
Il semble y avoir des choses à creuser, mais c'est le genre de lecture que j'ai du mal à comprendre :(.
pas reussi a indenter les listes. dsl
Il faut changer de puce -, puis +

Merci Kentaro pour les pistes.
Pour le moment, je cherche le cercle oscultateur tous les Pi/32 (entre a1 et a2) pour en extraire sa "courbure" et c'est pas trop mal. Mais ça fait trop de points, je trouve.

Faut que je creuse les trios de points pris sur l'ellipse pour y faire passer un cercle.
A toi de définir la distance entre les points donnant l'approximation que tu considères comme la plus acceptable entre l'arc d'ellipse et l'arc de cercle.
Oui, mais c'est dans un sens la sous-question de la question posée ici aussi.
On sait que ça sera toujours de l'approximation. Donc l'envie est de trouver le "meilleur" compromis entre nombre de points et écart avec l'ellipse d'origine.
Sinon, regarde les techniques de lissage ou comment trouver l'équation d'une courbe passant par x points (polynomiale)
Barf le problème est un peu à l'envers ici. On a déjà le truc lisse : c'est l'ellipse. Et on veut en faire des points reliés par des arcs de cercle.

ça, c'est simple [...]
Barf, reste à trouver une stratégie efficiente pour choisir les trios de points.

Testé
J'ai testé avec la recherche de cercle par 3 points et la stratégie suivante :
- découper l'arc d'ellipse avec un point de test tous les de 1°
- prendre 3 points consécutifs en extraire le cercle correspondant
- boucler sur les points suivant jusqu'à ce que le point ne soit plus sur le cercle avec un delta donné.
- créer l'arc et recommencer à l'étape 1 jusqu'à la fin du tableau de points.
Le résultat donne l'image jointe. Testé avec 2 tailles. et delta = 0.1mm
Problèmes :
- Le delta n'a pas la même influence suivant la taille de la forme
- Les points clé ne sont pas forcément à des endroits stratégiques (extremum). Leur position dépend du départ

il est possible de répartir les points selon ce profil de valeurs.
Wep, je comprends bien le principe, mais je vois pas comment ça peut se faire concrètement.
Sinon, tu demandes à ChatGPT
Il sort un truc différent à chaque fois et c'est pas toujours fonctionnel.
Bon, tout ça me montre que j'aurai du mieux écouter au lycée ... je tutoie mes limites rien à essayer comprendre ce que tu écris :)

ourea le courbure en fonction de t. a et b étant les rayons de l'ellipse.
$$\kappa(t) = \frac{ab}{(a^2\sin^2(t) + b^2\cos^2(t))^{3/2}}$$
def curvature(a, b, t)
(a * b) / Math.sqrt((a**2 * Math.sin(t)**2 + b**2 * Math.cos(t)**2)**3)
end

Merci Iskandar, mais ça va donner une liste de points tout ça, non ?

J'ai déjà transformé une liste de points en un "chemin continu" = un liste de segments et/ou arcs de cercles/ellipse. Tous les points sont sur le chemin. A ce niveau aucun approximation.
Ce chemin peut être utilisé tel quel dans un fichier SVG. Mais le DXF ne supporte pas les arcs d'ellipse. Je cherche donc à convertir un arc d'ellipse en une série d'arcs de cercle.

Eric78 oui, avec cette entité, on peut dessiner des ellipses et arcs d'ellipse. Mais c'est une entité flottante qui n'est connecté à rien à part que ses extrémités peuvent être plus ou moins au même endroit qu'une autres entités.
Le hic, c'est que ce qu'on donne pour définir cet arc c'est un centre, un rapport de rayons et deux angles. Il n'est jamais donné de point de départ ou arrivé. Et au fil des arrondis nécessaires parce que rien n'est précis à 1e-8 dans SketchUp, on en arrive à ça quand on zoom :

Merci benjams.
Par contre, j'ai du mal à voir comment ça rendra les portions d'arc plus lisses les unes par rapport aux autres

Merci Eric78 !

Merci etiennedm.
Oui et la publication est même plus fournie ici.
Reste qu'il ne travail que sur des quart d'ellipse et donc d'extrémum à extremum. La solution n'est pas clé en main pour l'adaptée à un arc. Mais ça reste en effet une autre stratégie intéressante. Même si la dernière page ne montre pas un résultat si parfait, même à 8 points :)

Merci francoisB30,
J'ai aussi regardé du côté de QCAD Pro qui offre le découpage suivant.
Mais cette fonction n'est pas dans la version Open Source.

Publication déplacée dans la rubrique Questions. Merci de veiller à respecter les type de contenu de chaque rubrique Saintjean

Jean-Claude Di Fazio c'est le rose du bouton "Financement" qui fait peur :) ?

Hmm, oui. C'est un bug qui arrive quand tu veux partager le lien d'un site qui ne propose pas de miniature.
Dans ce cas, j'avais fait un système qui va capturer la page d'accueil en image. Mais depuis la mise à jour mon système n'est plus compatible.
Il faudrait mettre à jour une dépendance et j'ai peur que ça fasse pire que mieux. Pour le moment je procrastine sur la question.
Merci ourea !
J'avoue qu'à la lecture le raisonnement semble se tenir. Mais j'ai aucune idée comment le coder et je suis pas certain d'en avoir vu les subtilités.
Je dirai pas non à un petit croquis
?
et
C'est pas la même chose ? = rayon du cercle oscultateur ?