Courbes polaires — geometry-core
Tracé d'une courbe polaire r = f(θ) via le builtin courbe("r = ...", theta_min=..., theta_max=...). En interne, la courbe est réécrite
en paramétrique (f(θ)·cos(θ), f(θ)·sin(θ)) et traitée par le même pipeline que les courbes
paramétriques.
Le mode angle est toujours en radians pour la branche polaire, indépendamment
de unite_angle("degrees"). Le paramètre theta peut s'écrire en ASCII ou
en LaTeX \theta.
Cercle polaire — r = 2·cos(θ)
Cercle de diamètre 2 centré en (1, 0), tracé sur [0, π]. La forme polaire la plus simple non triviale.
c = courbe("r = 2*cos(theta)", theta_min=0, theta_max=\pi, couleur="bleu")Cercle de rayon constant — r = 2
Quand r est constant, on obtient un cercle centré à l'origine. Détection automatique de fermeture sur [0, 2π].
c = courbe("r = 2", theta_min=0, theta_max=2*\pi, couleur="bleu", remplissage="bleu")Cardioïde — r = 1 − cos(θ)
Courbe fermée en forme de cœur. Cas particulier du limaçon de Pascal où a = b.
c = courbe("r = 1 - cos(theta)", theta_min=0, theta_max=2*\pi, couleur="violet", remplissage="violet")Limaçon avec boucle — r = 1 + 2·cos(θ)
Limaçon de Pascal avec boucle interne (car |a| < |b| dans r = a + b·cos(θ)).
c = courbe("r = 1 + 2*cos(theta)", theta_min=0, theta_max=2*\pi, couleur="rouge")Limaçon avec creux — r = 3 + 2·cos(θ)
Limaçon convexe avec creux mais sans boucle (car |a| > |b|).
c = courbe("r = 3 + 2*cos(theta)", theta_min=0, theta_max=2*\pi, couleur="orange")Rosace 4 pétales — r = sin(2·θ)
Pour r = sin(n·θ) avec n pair, on obtient 2n pétales sur [0, 2π].
c = courbe("r = sin(2*theta)", theta_min=0, theta_max=2*\pi, couleur="orange")Rosace 3 pétales — r = sin(3·θ)
Pour r = sin(n·θ) avec n impair, on obtient n pétales sur [0, π].
c = courbe("r = sin(3*theta)", theta_min=0, theta_max=\pi, couleur="vert")Spirale d'Archimède — r = θ
Spirale dont la distance à l'origine croît linéairement avec l'angle. Non fermée.
c = courbe("r = theta", theta_min=0, theta_max=6*\pi, couleur="cyan")Lemniscate-like — r = √|cos(2·θ)|
Approximation de la lemniscate de Bernoulli (avec abs pour éviter les valeurs négatives sous la racine).
c = courbe("r = sqrt(abs(cos(2*theta)))", theta_min=0, theta_max=2*\pi, couleur="magenta")Exemples réactifs
Les courbes polaires participent au système réactif : sliders et scalaires dans les équations ou
dans les bornes theta_min / theta_max redessinent la courbe.
Rosace dynamique — slider sur n
Déplace le slider pour faire varier le nombre de pétales : valeurs impaires → n pétales, valeurs paires → 2n pétales.
n = slider(min=2, max=8, valeur=3)
c = courbe("r = sin(n*theta)", theta_min=0, theta_max=2*\pi, couleur="vert")Limaçon dynamique — slider sur b
Quand b > 1 le limaçon a une boucle, quand b < 1 il a un creux, quand b = 1 c'est une cardioïde.
b = slider(min=0.5, max=3, valeur=2)
c = courbe("r = 1 + b*cos(theta)", theta_min=0, theta_max=2*\pi, couleur="rouge")Tracé animé — slider sur theta_max
Déplace le slider pour faire varier theta_max : la cardioïde se construit progressivement et bascule en courbe fermée à 2π.
s = slider(min=0.5, max=2*\pi, valeur=\pi)
c = courbe("r = 1 - cos(theta)", theta_min=0, theta_max=s, couleur="violet")Notation LaTeX — r = \theta
Le paramètre angulaire peut s'écrire en LaTeX \theta (équivalent à `theta` ASCII). Spirale d'Archimède sur [0, 4π].
c = courbe("r = \theta", theta_min=0, theta_max=4*\pi, couleur="cyan")Tangente à une courbe polaire
tangente(c, theta0) sur une courbe polaire retourne la droite tangente (pointillés) + le vecteur tangent. La syntaxe (d, v) = tangente(c, theta0) est obligatoire (destructuring).
Note pédagogique : sur une cardioïde r = 1 − cos(θ), le point de rebroussement à θ = 0 est une singularité (γ'(0) = (0,0)) — appeler tangente(c, 0) lève une erreur DSL "tangente non définie — vitesse nulle".
Tangente sur cardioïde à θ = π/2
La cardioïde a un point de rebroussement à θ=0 ; à θ=π/2 le point est régulier.
c = courbe("r = 1 - cos(theta)", theta_min=0, theta_max=2*\pi, couleur="violet")
(d, v) = tangente(c, \pi/2)Tangente sur rosace à θ = π/8
Vecteur tangent à la rosace 4 pétales pendant qu'elle s'enroule autour du premier pétale.
c = courbe("r = sin(2*theta)", theta_min=0, theta_max=2*\pi, couleur="orange")
(d, v) = tangente(c, \pi/8)Tangente animée sur limaçon — slider sur theta0
Déplace le slider pour suivre la tangente le long du limaçon. La magnitude du vecteur tangent varie avec la vitesse instantanée.
c = courbe("r = 1 + 0.5*cos(theta)", theta_min=0, theta_max=2*\pi, couleur="rouge")
t0 = slider(min=0, max=2*\pi, valeur=\pi/3)
(d, v) = tangente(c, t0)Point sur courbe polaire et lieu
point_sur(c, t0) sur une courbe polaire crée un point ancré au paramètre angulaire theta = t0. Combiné avec lieu(), on peut tracer la trajectoire d'un
objet construit à partir du point quand il parcourt toute la courbe.
Point glissant sur cardioïde
Le slider t pilote l'angle θ ; P = γ(θ) suit la cardioïde.
c = courbe("r = 1 - cos(theta)", theta_min=0, theta_max=2*\pi, couleur="violet")
t = slider(min=0, max=2*\pi, valeur=\pi/2)
P = point_sur(c, t)Lieu du milieu OP — cardioïde
Quand P parcourt la cardioïde, le milieu M de [OP] décrit une demi-cardioïde (homothétie de rapport 1/2 centrée en O). Le lieu est fermé (parcourt complet θ ∈ [0, 2π]).
c = courbe("r = 1 - cos(theta)", theta_min=0, theta_max=2*\pi, couleur="violet")
O = point(0, 0)
t = slider(min=0, max=2*\pi, valeur=0)
P = point_sur(c, t)
M = milieu(O, P)
L = lieu(M, P)Intersection de courbes polaires
intersection(c1, c2, k) trouve les points d'intersection de deux courbes polaires via
Newton 2D multi-start.
Cardioïde × cercle polaire
r = 1 − cos(θ) et r = 1 se croisent en θ = π/2 et θ = 3π/2 → points (0, 1) et (0, −1).
c1 = courbe("r = 1 - cos(theta)", theta_min=0, theta_max=2*\pi, couleur="violet")
c2 = courbe("r = 1", theta_min=0, theta_max=2*\pi, couleur="bleu")
A = intersection(c1, c2, 1)
B = intersection(c1, c2, 2)