[Avertissement: je pense que ce qui suit devrait fonctionner, mais je ne l'ai pas codé moi-même]
Je ne pouvais pas penser à une méthode «triviale» pour produire une réponse oui / non, mais ce qui suit serait une approche raisonnable pour une solution pratique à la question.
Supposons que nos courbes soient A (s) et B (t) avec les points de contrôle { A0, A1..An } et { B0, .. Bm } respectivement.
Il me semble que, étant donné une paire de Béziers 2D pour laquelle nous souhaitons déterminer si oui ou non se croisent, il y a six cas à considérer:
Cas où l'on peut déterminer "trivialement" qu'elles ne se croisent pas .
Cas où elles se croisent un nombre fini de fois et où nous pouvons «facilement» déterminer qu'elles se coupent définitivement au moins une fois (mais peu nous importe où ces intersections se produisent)
L'un des Béziers est dégénéré, c'est-à-dire un point (qui se produira si tous les points de contrôle sont identiques). Nous pouvons supposer que nous avons déjà traité le cas où les deux sont des points.
Une ou plusieurs des courbes sont fermées, par exemple. A0 == An. Pour vous simplifier la vie, nous allons subdiviser ces courbes et recommencer.
Il existe un nombre infini de points d'intersection car chacun est un sous-ensemble d'un Bézier "parent" et ils se chevauchent.
Nous ne sommes pas certains des cas ci-dessus et avons besoin d'une enquête plus approfondie
Pour le moment, nous ignorerons 3 et 4, mais nous y reviendrons plus tard.
Cas 1
Comme vous l'indiquez dans votre question, si les cases de délimitation respectives des points de contrôle de A et B ) ne se coupent pas, les courbes ne peuvent pas se croiser. Évidemment, c'est un test de rejet rapide, mais il est trop conservateur. Comme vous le savez probablement, avec une courbe de Bézier, la coque convexe de ses points de contrôle forme une limite (plus serrée) sur la courbe. On peut ainsi utiliser la technique de l'axe de séparation pour décider si les coques de A et B ne se croisent pas. (par exemple, comme indiqué dans Wikipedia :)
Cas 2
Si le test du cas 1 échoue, vous pouvez alors vérifier l'existence "triviale" d'une intersection. Maintenant, il existe probablement de meilleures façons de le faire, mais l'approche suivante, relativement bon marché, m'est venue à l'esprit:
Considérez simplement la courbe A:
A0AnA0An¯¯¯¯¯¯¯¯¯¯¯¯A0An¯¯¯¯¯¯¯¯¯¯¯¯
Si nous faisons de même avec la courbe B, nous obtenons le cas (possible) suivant:
A0AnB0Bm
Cas 6
A1,A2,B1,B2
(A1,B1),(A2,B1)...(A2,B2)
Cas 3 et 5
C'est là que ça devient un peu plus fastidieux.
Si le «cas 3» dépasse le test du «cas 1», il me semble que vous devez résoudre une intersection réelle. Étant donné qu'il existe un processus simple pour mapper les N points de contrôle d'un Bézier, A (s), aux N-1 points du Bézier, A '(s), représentant alors sa première dérivée (à condition de prendre soin de la des situations relativement rares, dites «dégénérées» où la dérivée 1 fait zéro), alors l'itération de Newton (sur une dimension) pourrait être utilisée pour trouver des solutions potentielles.
Notez également que, puisque les points de contrôle de A '(s) sont liés aux valeurs dérivées, il existe un potentiel d'élimination précoce de certains cas.
Le cas 5 semble relativement improbable, donc peut-être seulement si après quelques récursions il n'y a pas de preuve concluante, on pourrait essayer chaque point final de A contre la courbe B et vice versa. Cela ne donnerait qu'une preuve d'intersection - pas une preuve de non-intersection.