← Retour aux demos

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.

-6-4-22468-6-4-2246c
Code DSL
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π].

-8-6-4-22468-6-4-2246c
Code DSL
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.

-8-6-4-22468-6-4-2246c
Code DSL
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(θ)).

-8-6-4-22468-6-4-2246c
Code DSL
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|).

-8-6-4-22468-6-4-2246c
Code DSL
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π].

-8-6-4-22468-6-4-2246c
Code DSL
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, π].

-8-6-4-22468-6-4-2246c
Code DSL
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.

-8-6-4-22468-6-4-2246c
Code DSL
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).

-8-6-4-22468-6-4-2246c
Code DSL
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.

-8-6-4-22468-6-4-2246c
n 3
Code DSL
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.

-8-6-4-22468-6-4-2246c
b 2
Code DSL
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π.

-8-6-4-22468-6-4-2246c
s 3.14
Code DSL
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π].

-8-6-4-22468-6-4-2246c
Code DSL
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.

-8-6-4-22468-6-4-2246cdv
Code DSL
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.

-8-6-4-22468-6-4-2246cdv
Code DSL
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.

-8-6-4-22468-6-4-2246cdv
t0 1.05
Code DSL
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.

-8-6-4-22468-6-4-2246cP
t 1.57
Code DSL
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π]).

-8-6-4-22468-6-4-2246cLOPM
t 0
Code DSL
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).

-8-6-4-22468-6-4-2246c1c2AB
Code DSL
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)