/* DEFN : Algebraic Definitions of Ideal Objects 

						Updated: 1st April 1981
*/


			% sphere in cylindrical polars

is_defn(sphere, Sph, Origin, 0=<r=<sqrt(A^2-z^2) & 0=<theta=<2*pi & -A=<z=<A,
	[isa(sphere,Sph), centre(Sph,Origin), radius(Sph,A)] ).



			% cylinder in cylindrical polars

is_defn(cylinder, Cyl, Origin, 0=<r=<A & 0=<theta=<2*pi & 0=<z=<H,
	[isa(cylinder,Cyl), centre(Cyl,Origin), 
		radius(Cyl,A), height(Cyl,H)] ).



			% tube in cylindrical polars

is_defn(tube, Tbe, Origin, r=A & 0=<theta=<2*pi & 0=<z=<H,
	[isa(tube,Tbe), centre(Tbe,Origin), 
		radius(Tbe,A), height(Tbe,H)] ).



			% cone in cylindrical polars

is_defn(cone, Cne, Origin, 0=<r=<A*(H-z)/H & 0=<theta=<2*pi & 0=<z=<H,
	[isa(cone,Cne), centre(Cne,Origin), 
		radius(Cne,A), height(Cne,H)] ).



			% hollow sphere in cylindrical polars

is_defn(shell, Shll, Origin, r=sqrt(A^2-z^2) & 0=<theta=<2*pi & -A=<z=<A,
	[isa(shell,Sph), centre(Sph,Origin), radius(Sph,A)] ).



			% circular disc in cylindrical polar coordinates

is_defn(disc, Dsc, Origin, 0=<r=<A & 0=<theta=<2*pi & z=0,
	[isa(disc,Dsc), centre(Dsc,Origin), radius(Dsc,A),
	meets(axis(z),Dsc,Origin)] ) . 


			% circular ring in cylindrical polar coordinates

is_defn(ring, Rng, Origin, r=A & 0=<theta=<2*pi & z=0,
	[isa(ring,Rng), centre(Rng,Origin), radius(Rng,A),
	meets(axis(z),Rng,Origin)] ).


			% radial line in spherical polar coordinates

is_defn(line, Lne, Origin, A=<r=<B & theta=T & phi=P,
	[isa(line,Lne),
	line_sys(Lne,Lend,Rend),
	isa(point,Lend), isa(point,Rend),
	on(Origin,Lne),
	separation(Origin,Lend,A,[T,P]), separation(Origin,Rend,B,[T,P])] ) . 


			% horizontal line in cartesian coordinates

is_defn(line, Lne, Origin, A=<x=<B & y=0 & z=0,
	[isa(line,Lne), line_sys(Lne,Lend,Rend),
	isa(point,Lend), isa(point,Rend),
	isa(point,Origin),
	on(Origin,Lne),
	separation(Origin,Lend,A,[0,0]), separation(Origin,Rend,B,[0,0])] ) .



			% point in spherical polar coordinates

is_defn(point, Pt, Origin, r=R & theta=T & phi=P,
	[isa(point,Pt), separation(Origin,Pt,R,[T,P])] ).


			% point in cylindrical polar coordinates

is_defn(point, Pt, Origin, r=R & theta=T & z=0,
	[isa(point,Pt),
	separation(Origin,Pt,R,[T,0])] ).

/*			% point in cartesian coordinates

is_defn(point, Pt, Origin, x=X & y=Y & z=Z,
	[isa(point,Pt),
	separation(Origin,Pt,sqrt(X^2+Y^2+Z^2),
		[arctan(Y/X),arctan(Z/sqrt(X^2+Y^2))]) ] ).
*/



			% rectangle in cartesian coordinates

is_defn(rectangle, Rect, Origin, A=<x=<B & C=<y=<D & z=0,
	[isa(rectangle,Rect), quad_sys(Rect,Top,Bottom,Left,Right),
	isa(line,Top), isa(line,Bottom), isa(line,Left), isa(line,Right),
	perp_dist(Origin,Top,D,[90,0]), perp_dist(Origin,Bottom,C,[90,0]),
	perp_dist(Origin,Left,A,[0,0]), perp_dist(Origin,Right,B,[0,0])] ).



			% parallelogram in cartesian coordinates

is_defn(parallelogram, Para, Origin,
		A/sin(E)+y/tan(E)=<x=<B/sin(E)+y/tan(E) & C=<y=<D & z=0,
	[isa(parallelogram,Para), quad_sys(Para,Top,Bottom,Left,Right),
	isa(line,Top), isa(line,Bottom), isa(line,Left), isa(line,Right),
	perp_dist(Origin,Top,D,[90,0]),
	perp_dist(Origin,Bottom,C,[90,0]),
	perp_dist(Origin,Left,A,[E-90,0]),
	perp_dist(Origin,Right,B,[E-90,0])] ).



