source: CGBLisp/examples/billiard2.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.4 KB
Line 
1if get('geometry2, 'version)=false then load("geometry2");
2n:2;
3/* Introduce simplifications */
4u0:0;
5v0:0;
6u1:1;
7v1:0;
8
9/* Define points Ai=[xi,yi] */
10for i:0 thru n-1 do
11 A[i]:[concat(x,i),concat(y,i)];
12
13/* Define circle centers Oi=[ui,vi] */
14for i:0 thru n-1 do
15 O[i]:[concat(u,i),concat(v,i)];
16
17/* Define radii and lengths */
18for i:0 thru n-1 do (
19 R[i]:concat(R,i),
20 l[i]:concat(l,i),
21 p[i]:concat(p,i),
22 q[i]:concat(q,i)
23);
24
25/* Ai is on the circle with center Oi and radius Ri */
26eqns1:makelist(distance(O[i],A[i],R[i]),i,0,n-1);
27
28
29shift(k):=if k=n-1 then 0 else k+1;
30lshift(k):=if k=0 then n-1 else k-1;
31
32
33/* Lagrange expression */
34f: sum(l[i],i,0,n-1)-sum(p[i]*distance(O[i],A[i],r[i]),i,0,n-1)
35 -sum(q[i]*distance(A[i],A[shift(i)],l[i]),i,0,n-1);
36
37/* Lagrange equations */
38eqns0:makelist(diff(f,l[i]),i,0,n-1);
39eqns1:makelist(diff(f,concat(x,i)),i,0,n-1);
40eqns2:makelist(diff(f,concat(y,i)),i,0,n-1);
41eqns3:makelist(diff(f,p[i]),i,0,n-1);
42eqns4:makelist(diff(f,q[i]),i,0,n-1);
43
44/* The rationale is that the entire circles would have to be orbits
45and thus we are seeking for such parameters for which the circle equations
46imply satisfaction of critical point equations */
47
48eqns:expand(append(eqns0,eqns1,eqns2));
49
50
51vars:listofvars(makelist([p[i],q[i],l[i]],i,0,n-1));
52params:listofvars(makelist([A[i],O[i],r[i]],i,0,n-1));
53cover:expand([append(''eqns3,''eqns4),[]]);
54
55eqns:''eqns;
56stringout("billiard2.out",eqns,vars,params,cover);
Note: See TracBrowser for help on using the repository browser.