source: CGBLisp/examples/billiard3.macsyma@ 1

Last change on this file since 1 was 1, checked in by Marek Rychlik, 15 years ago

First import of a version circa 1997.

File size: 1.3 KB
Line 
1if get('geometry2, 'version)=false then load("geometry2");
2if get('cone, 'version)=false then load("cone");
3n:2;
4/* Introduce simplifications */
5u0:0;
6v0:0;
7u1:1;
8v1:0;
9
10/* Define points Ai=[xi,yi] */
11for i:0 thru n-1 do
12 A[i]:[concat(x,i),concat(y,i)];
13
14/* Define circle centers Oi=[ui,vi] */
15for i:0 thru n-1 do
16 O[i]:[concat(u,i),concat(v,i)];
17
18/* Define radii and lengths and Lagrange multipliers */
19for i:0 thru n-1 do (
20 R[i]:concat(R,i),
21 l[i]:concat(l,i),
22 p[i]:concat(p,i),
23 q[i]:concat(q,i)
24);
25
26/* Ai is on the circle with center Oi and radius Ri */
27eqns1:makelist(distance(O[i],A[i],R[i]),i,0,n-1);
28
29
30shift(k):=if k=n-1 then 0 else k+1;
31lshift(k):=if k=0 then n-1 else k-1;
32
33
34/* Lagrange expression */
35f: sum(l[i],i,0,n-1)-sum(p[i]*distance(O[i],A[i],r[i]),i,0,n-1)
36 -sum(q[i]*distance(A[i],A[shift(i)],l[i]),i,0,n-1);
37
38/* Lagrange equations */
39eqns0:makelist(diff(f,l[i]),i,0,n-1);
40eqns1:makelist(diff(f,concat(x,i)),i,0,n-1);
41eqns2:makelist(diff(f,concat(y,i)),i,0,n-1);
42eqns3:makelist(diff(f,p[i]),i,0,n-1);
43eqns4:makelist(diff(f,q[i]),i,0,n-1);
44
45eqns:expand(append(eqns0,eqns1,eqns2,eqns3,eqns4));
46
47vars:listofvars(makelist([p[i],q[i],l[i]],i,0,n-1));
48params:listofvars(makelist([A[i],O[i],r[i]],i,0,n-1));
49cover:expand([[[],[]]]);
50
51eqns:''eqns;
52stringout("billiard3.out",eqns,vars,params,cover);
Note: See TracBrowser for help on using the repository browser.