les diametres tels quels ne suffisent pas. on peut tracer des lignes de vue tangentes aux deux socles qui n'intersectent pas les diametres. alors apres on peut etendre les droites prependiculaires a la ligne centre a centre, de sorte a couvrir plus que le simple diametre (on peut trouver exactement combien par trigo) et la ca marche (remarque amusante : les longueurs a couvrir peuvent devenir enormes dans certaines configs, et il faut alors faire varier le pas... bref autant parcourir les cercles aux-meme c'est limite plus simple).
le probleme suivant c'est l'affichage du resultat : cette methode permet de trouver facilement une ou plusieurs lignes de vues. je peux afficher la premiere que je trouve et m'arreter, mais si elle convient pas pour une raison que j'ignore (clouds, decors, regle a la con) les joueurs pourraient vouloir en voir une autre. si je les affiche toutes, ca me fait what million de lignes a afficher. ou alors a partir des lignes j'essaie de deviner une enveloppe, ce qui revient a la methode choisie ci-dessus.
un autre probleme c'est qu'on se retape tout quand on enleve/rajoute un intervening.
au final je pense qu'il y a de nombreuses facon de proceder, toutes avec leurs qualites et leurs defauts.
la methode choisie a l'avantage de fournir toutes les informations necessaires a la decision dans 99% des cas.
elle est aussi econome en affichage (2 polygons par intervening model + l'enveloppe de base)
elle permet aussi de limiter pas mal les calculs dans les cas simples, et ne recourt au lancer de rayon que dans les cas compliques, pour une zone limitee (car oui, il y a du lancer de rayon dedans, mais en gros je reduit enormement le nombre de rayon lances dans la pluspart des cas).
elle a l'inconvenient de couter plus cher qu'un lancer de rayon brut quand le nombre d'intervening models devient eleve (je lance 2 rayons par intervening + une dizaine par zone grise, je vous laisse estimer la limite a partir de laquelle ca coute plus cher que 5000 rayons lances brutalement). mais ca devrait rarement etre le cas.
la decision finale appartient aux joueurs, c'est un compromis suffisant je pense dans un premier temps.
(pour info ma methode est sensiblement la meme que pour la librairie que tu m'avais montre, sauf que le probleme est plus complique quand la source est un cercle et pas un point, et les "murs" des cercles de diametre differents de la source et pas des betes segments. en fait je gere les meme cas que la librairie, et je gere pas les cas foireux que la librairie n'a pas a gerer a cause du fait que leur source est un point. mon algo reduit a une source point et des murs segments revient au meme que le leur)