/interdroite {
%% A B C D
/dr@ite2 4 array def
dr@ite2 3 3 -1 roll put
dr@ite2 2 3 -1 roll put
dr@ite2 1 3 -1 roll put
dr@ite2 0 3 -1 roll put
/dr@ite1 4 array def
dr@ite1 3 3 -1 roll put
dr@ite1 2 3 -1 roll put
dr@ite1 1 3 -1 roll put
dr@ite1 0 3 -1 roll put
%%% %% trace pour deboguage
%%% dr@ite1 aload pop droite
%%% dr@ite2 aload pop droite
%%% Dans tous les cas, on suppose que l'intersection existe
%%%
%%% * la 1ere droite est verticale. les equations reduites sont
%%% x = a1 et y = a2 x + b2
%%% Le point d'intersection est :
%%% {{x = a1, y = b2 + a1 a2}}
%%%
%%% * la 2eme droite est verticale. les equations reduites sont
%%% x = a1 x+ b1 et x = a2
%%% Le point d'intersection est :
%%% {{x = a2, y = b1 + a1 a2}}
%%%
%%% * aucune n'est verticale. Les equations reduites sont
%%% y = a1 x + b1 et y = a2 x + b2
%%% Le point d'intersection est :
%%% { { b2 - b1 a1 b2 - a2 b1 } }
%%% { { x = -------, y = ------------- } }
%%% { { a1 - a2 a1 - a2 } }
%%% remarque : pour le moment, je n'arrive pas a rendre mes variables
%%% locales : elle restent globales. Pour que cela ne soit pas trop
%%% genant, je les note respectivement @1, @@1, @2 et @@2 au lieu de a1,
%%% b1, a2 et b2.
dr@ite1 aload pop verticale?
{
/@1 {dr@ite1 aload pop pop pop pop} def
/@2 {dr@ite2 aload pop coeffdir} def
/@@2 {dr@ite2 aload pop ordorig} def
@1
@1 @2 mul @@2 add
}
{
dr@ite2 aload pop verticale?
{
/@1 {dr@ite1 aload pop coeffdir} def
/@@1 {dr@ite1 aload pop ordorig} def
/@2 {dr@ite2 aload pop pop pop pop} def
@2
@1 @2 mul @@1 add
}
{
/@1 {dr@ite1 aload pop coeffdir} def
/@@1 {dr@ite1 aload pop ordorig} def
/@2 {dr@ite2 aload pop coeffdir} def
/@@2 {dr@ite2 aload pop ordorig} def
@@2 @@1 sub @1 @2 sub div
@1 @@2 mul @2 @@1 mul sub
@1 @2 sub div
}
ifelse
}
ifelse
} def
|