;;; -*- Mode:Lisp; Syntax: Common-Lisp; Package:ONTOLINGUA-USER; Base:10 -*-

;;; Physical Components Ontology
;;; (c) 1993 Greg Olsen and Thomas Gruber

(in-package "ONTOLINGUA-USER")

(define-theory MECHANICAL-COMPONENTS (component-assemblies
				      simple-geometry)
  "This theory provides a minimal vocabulary for describing
three-dimensional objects with mass.  It is built on the abstract
notion of components that we get from the component-assemblies theory,
and the elementary geometric primitives from the simple-geometry theory.

In this theory, we say that a MECHANICAL-COMPONENT is a component that has a
REFERENCE-POINT, a REFERENCE-FRAME, and a MASS.  Information about the spatial
extent and relative position of the object can be specified using the
reference frame and point.  The MASS of a mechanical-component is a physical
quantity specified as the value of a unary function.  The INERTIA-TENSOR for
the component is given with a binary relation from the component and its
reference point to an inertia quantity."
  :issues ("Copyright (c) 1994 Greg Olsen and Thomas R. Gruber")
  )

(in-theory 'mechanical-components)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Physical Components
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(define-class MECHANICAL-COMPONENT (?p)
  "Mechanical-component is a specialization of COMPONENT
from the component-assemblies theory.  Mechanical components
are three-dimensional objects with an associated reference point
and reference frame.  They also have a slot called MASS
whose value is a scalar-quantity of dimension mass-dimension."

  :def (and (component ?p)
	    (3D-point (REFERENCE-POINT ?p))
	    (3D-frame (REFERENCE-FRAME ?p))
	    (scalar-quantity (MASS ?p))
	    (3D-dyad (inertia-tensor ?p (reference-point ?p)))))


(define-class MECHANICAL-CONNECTION (?c)
  "The physical-connection class is a specialization of the connection class
from the component-components theory."

  :def (connection ?c))


(define-function REFERENCE-POINT (?comp) :-> ?point
  "The reference point of a mechanical-component."
  :def (and (mechanical-component ?comp)
	    (3D-point ?point)))


(define-function REFERENCE-FRAME (?comp) :-> ?frame
  "The reference frame of a mechanical-component."
  :def (and (mechanical-component ?comp)
	    (3D-frame ?frame)))


(define-function MASS (?comp) :-> ?m
  "The mass of a mechanical-component, which is a scalar
quantity of physical-dimension mass-dimension."
  ;; This is an attribute
  :def (and (mechanical-component ?comp)
	    (scalar-quantity ?m)
	    (quantity.dimension ?m mass-dimension)))


(define-function INERTIA-TENSOR (?comp ?pt) :-> ?i
  "The inertia tensor of mechanical-component. Relative to a
given point."
  :def (and (mechanical-component ?comp)
	    (3D-point ?pt)
	    (3D-dyad ?i)
	    (quantity.dimension
	     ?i 
	     (* mass-dimension
		(* length-dimension
		   length-dimension)))))


(define-function APPLIED-FORCE (?comp1 ?comp2) :-> ?f
  "The resultant applied force of comp1 on comp2.  A 3D vector."
  :def (and (mechanical-component ?comp1)
	    (mechanical-component ?comp2)
	    (3D-vector-quantity ?f)
	    (quantity.dimension ?f force-dimension)))


(define-function APPLIED-TORQUE (?comp1 ?comp2) :-> ?t
  "The resultant applied torque of comp1 on comp2.  A 3D vector."
  :def (and (mechanical-component ?comp1)
	    (mechanical-component ?comp2)
	    (3D-vector-quantity ?t)
	    (quantity.dimension ?t (* force-dimension
				      length-dimension))))




This Lisp-to-HTML translation was brought to you by
François Gerbaux and Tom Gruber