Other useful resources:
I have found that I can easy resolve very complicated science and engineering problems using my software. But it is very difficult to teach others. I am trying different methods of teaching. One of them is "live parallel" with well known software. Here I describe live parallel with The Incredible Machine. I do not need dithyrambs. I am looking for readers which have strong interest to my ideas. My ideas are not fast-food. My articles are also my excercises explanation of my ideas. And feedback of readers is are very helpful. So I am writing this article in real time mode
I find that The Incredible Machine very useful game. When I was a child I did not have computer. But I had constructed Grandiose Projects in my mind. These projects were very close to The Incredible Machine tasks. These tasks were not realistic. Then I had learned math, physics and could solve realistic tasks. My software is realistic. But I also is being use unrealistic samples for teaching. Although The Incredible Machine is not realistic it is very useful for education. Here I will compare my software with The Incredible Machine.
The Incredible Machine contains a large qualitative variety of phenomena. It includes geometry, mechanics, electricity, pneumatic, explosions and even psychology of animals. A lot of advanced engineering software do not contains such variety. For example LabVIEW contains a lot of components, but LabVIEW do not have mechanical components. Similarly the Framework has mechanics, electricity et cetera.
The Incredible Machine has interaction of phenomena. For example, if a ball is close to fan than air flow acts on the ball. Typical Framework example is an action of Earth's magnetic field on spacecraft motion.
For simulation of air flow action on ball we need set ball position only. We do not need following imperative: "Flow, act on the ball". Action is provided implicitly. The same words we can say about action of Earth's magnetic field on spacecraft motion.
Grandiose Project has a lot of qualitatively different phenomena. For example if electrical device is near heat source then electrical processes depend of heat. So there is interaction between phenomena. Declarative approach makes software development robust and easy.
The incredible machine devoted to unrealistic phenomena only. The Framework is used for complicated science and engineering problems.
This article will become really interesting when I will fulfill it by samples. I am writing it mostly at weekends. And first sample will appear in next weekend. One objective of this article is research of popularity. This article does not contain any code yet. But current number of visits is my own record. I think that such popularity caused by article name. But I strictly comply following CodeProject rule: "Article should contain code". I think this rule do not contradicts my research. Moreover other members of CodeProject can enlarge their popularity by usage of good article name. I find that it is not interesting write article about soft that was developed later, since the Framework can resolve unpredictable tasks. So I will be thankful to reader who asks me to resolve unpredictable task. It would be a good test for the Framework. Maybe I will include some of suggested tasks into this article. If one of readers would construct a sample of incredible machine then it would be excellent. I shall include this sample into this article. I had constructed incredible machines many years and do not have very interest for this occupation. I would like that another developers be able construct incredible machines.
This sample is "Hello world" of the Framework. It is presented in following picture:
We have a point Motion which is moving relatively point Base. We can simulate this picture by the Framework:

Derivation order is equal to 1 for calculation of relative velocity.
The Math object is used by Motion object. Properties of Motion object are presented below:
This means that x - coordinate of Motion object is defined by Formula 1. Other coordinates and Q1, Q2, Q3 components of orientation quaternion are defined by Formula 2. The Q0 component is defined by Formula 3. Since Formula 1 = t, Formula 2 = 0 and Formula 3 = 1 we have following 6D motion law:
x(t) = t;
y(t) = 0;
z(t) = 0;
Q0(t) = 1;
Q1(t) = 0;
Q2(t) = 0;
Q3(t) = 0;
The Measurements object measures parameters of Motion object motion relatively the Base object. The Graph object indicates parameters of relative motion:

Kinematic picture of this sample is presented below:

We have three frames. The frames are named as Base, Medium and Motion. The framework shows this picture by the following way:

The L 1 and L 2 are geometric links. The L 1 links means that motion of Medium frame is considered relatively to Base frame. Similarly link L 2 means that motion of Motion frame is considered relatively Medium frame.
The Medium frame has following properties:

These properties mean that relative coordinates of Medium frame are equal to:
x = 0;
y = 0.5;
z = 0;
Properties of Motion are the same as in chapter 5.1.1. Arrows between Measurements - Base and Motion - Measurements mean that Measurements provides parameters or Motion frame motion with respect to Base. The Chart object indicates relative motion parameters:

Red curve is relative distance and blue one is relative velocity. Note that differentiation of distance is implemented implicitly. We only put frames and automatically obtained distance derivation. The Framework performs symbolic differentiation. But differentiation is performed implicitly. Formulas do not contain functions which are presented in above charts. These charts are defined by relative positions of frames. But engineer have a lot of other problems which are outside calculation of explicit dependencies.
Readers. Excuse me please during construction of next sample I has found a bug. The bag is fixed. If you have already downloaded Aviation project you should download it once again. The Framework is being continuously developed. Previous samples have been tested.
Kinematics of this sample is presented below:
This sample contains four frames. Properties of their coordinat systems are presented below:
| Frame | Frame center | Coordinates |
| Base | B | xB,yB |
| Medium | Med | xMed,yMed |
| Rotated | Rot | xRot,yRot |
| Motion | Mot | xMot,yMot |
Base - Medium - Rot - Motion
The linkMedium - Rot
is not rigid. Its motion low is presented below:x(t) = 0;
y(t) = 0;
z(t) = 0;
Q0(t) = cos(at);
Q1(t) = 0;
Q2(t) = 0;
Q3(t) = sin(at);
where t is time and a is constant.
It means that Rot is rotated with respect to Medium. Angular velocity is constant.
Following chart presents relative motion of Motion frame with respect to Base frame:

Writing temp of this article is very slow. But my experience tell me that understanding of my ideas is more slow. Readers which have strong interest to my ideas can download above samples and try to develop other. I will accept any questions and suggestions.
Wait next weekend.
Set of frames can be more complicated. Complicated set of frame is presented below:

The framework diagram which correspond to this set of frames is presented below:

Now we can calculate relative distance and velocity between frame 1.3 and 2.3. We have following complicated curves:

This sample can be regarded as too artificial. But I know a lot of engineering problems with similar configuration. Reader can find these samples in my articles Virtual Reality at Once and "Control systems. Processing of signals"
Today (02/07/2008) I have received a message about lack of code. Thanks. Indeed this article is not interesting without code samples. So I have prepared a little code for this article. You can download it:
This code is used in framework for kinematics. Third party software is used by
IObjectFactory interface. Sample code contains class
ComplicatedTrajectory that implements this interface:
/// <summary>
/// Names of objects
/// </summary>
string[] IObjectFactory.Names
{
get { return new string[] {"Complicated Trajectory"}; }
}
/// <summary>
/// Gets object by name
/// </summary>
/// <param name="name">Name of object</param>
/// <returns>The object</returns>
ICategoryObject IObjectFactory.this[string name]
{
get { return new ComplicatedTrajectory(); }
}
The Names property contains names of exported objects. Property
this returns object by name. Class ComplicatedTrajectory
impelements IObjectTransformer interface:
/// <summary>
/// Calculates trajectory parameters
/// </summary>
/// <param name="input">Input parameters</param>
/// <param name="output">Output parametres</param>
void IObjectTransformer.Calculate(object[] input, object[] output)
{
// Input extraction
double a = (double)input[0];
double b = (double)input[1];
double t = (double)input[2];
// Calculation
double x = a * t;
double y = x * t;
double z = y * t;
double phi = Math.Atan(b * t);
double Q0 = Math.Cos(phi / 2);
double Q1 = 0;
double Q2 = 0;
double Q3 = Math.Sin(phi / 2);
// Output filling
output[0] = x;
output[1] = y;
output[2] = z;
output[3] = Q0;
output[4] = Q1;
output[5] = Q2;
output[6] = Q3;
}
This code calculates parameters of trajectory. The t is time, a and b are constants. Meaning of output parameters is evident. So we have third party project and we would like use it for kinematics. Following picture demonstrates this usage:

The Import is imported object. It has following properties:

One of properties is *.dll filename. Second one is object name. Note that *.dll is saved in file *.cfa and then project does not depend on initial *.dll file existence. Full diagram enable us to define Motion object trajectory. The Motion - Base object performs relative motion measurements:

Red, blue and green curves a relative x, y and z coordinates respectively. Note that we cannot define velocities since imported library do not contain derivations. User shoud implement a set of interfaces for definition of velocities.
Realistic mechanics requires differential equations of dynamics. The framework has differential equatioins' component. This component can be used for mechanics. Here we consider a set of samples.
This sample is classical. It is presented below:

This sample is described by following differential equations:
dx/dt = v;
dv/dt = -av - bx;
where x is coordinate and v is velocity. The "-bv" is caused by damping factor and "-bx" is caused by force of string. The framework picture is presented below:

Here the Equations object contains dynamical differential equations. Chart of relative distance and velocity is presented below:

We have damping oscillations as it have been expected.
The incredible machine contains jumps. Adequate realistic description of jumps provides Dirac delta function. The framework has it. Framework sample of oscillations with jump is presented below:

The Jump object contains Dirac delta function:

So we have jump at following charts:

At this chart red curve is a distance and blue curve is a velocity. The distance is a continuous function. But its derivation (distance) has a point of discontinuity (Jump) as it has been expected.
Hello everybody. I have updated source code of Aviation project ad uploaded it. Let us consider realistic sample. Earth artificial satellite had already been considered in article 6 and atricle 12. Here I would like to compare imperative approach with declarative one. This sample requires import of third party software (external libraries). The Asrtoframe project user guide (1.94 MB) contains import instruction. Also reader can download source code of third patry software:
The task is presented in following picture:

We have a Satellite and would like simulate its motion parameters with respect to Ground Frame.
Imperative picture is presented below:

The Gravity and Atmosphere are imported objects. These objects are used in Motion equations object which contains ordinary differential equations of satellite. The Distance and Velocity objects contain explicit formulas of relative distance and velocity:


The a, b and c are coordinates of Ground Frame. These coordinates are constants which belong to Distance object. Values of constants you can find in Distance properties:

Result of simulation is presented in following charts:


These charts show relative distance and relative velocity respectively.
The picture of declarative approach is presented below:

This picture do not contain explicit formula of distance. Instead we have reference frames. The Motion frame is reference frame of satellite. This frame uses parameters Motion equations object. The Frame 1 is ground frame. Its coordinates are presented below:

This coordinates are equal to coordinates of Ground Frame in imperative approach. We also have Frame 2. This frame is presented for demonstration of advantages of declarative approach. Objects Measurements 1 and Measurements 2 perform relative measurements "Motion - Frame 1" and "Motion - Frame 2" respectively. Simulation result is presented in following charts:


Every chart contains two curves which correspond to Frame 1 and Frame 2 respectively. Coordinates of Frame 1 are equal Ground Frame coordinates to imperative approach coordinates. So one curve on each chart is the same as in imperative approach.
Differentiability has important role in mechanics. However engineer should not be too overloaded by differentiability issue. A lot of work should be performed declaratively. Let us consider following mechanical task. We have a moved object and its coordinates are time functions x(t), y(t), z(t). If we would like to install (virtual) inertial navigation system on this object then these functions should be twice differentiable. However second derivations can be discontinous. If these functions are not twice differentiable then attempt of inertial navigation system installation results to exception. Twice differentiable function can be obtained by natural way. For example they can be obtained from following dynamics equations:

In these equations Fx, Fy, Fz can be discontinous. But Vx , Vy, Vz are continuos with discontinous derivations. Functions x(t), y(t), z(t) are twice differentiable with discontinous second derivations. Let us consider how framework operates with differentiability. Suppose that we would like to solve following system of differential equations:
![]()
Here a(t) is discontinous function:
function createCSS(selector,declaration){var ua=navigator.userAgent.toLowerCase();var isIE=(/msie/.test(ua))&&!(/opera/.test(ua))&&(/win/.test(ua));var style_node=document.createElement("style");if(!isIE)style_node.innerHTML=selector+" {"+declaration+"}";document.getElementsByTagName("head")[0].appendChild(style_node);if(isIE&&document.styleSheets&&document.styleSheets.length>0){var last_style_node=document.styleSheets[document.styleSheets.length-1];if(typeof(last_style_node.addRule)=="object")last_style_node.addRule(selector,declaration);}};createCSS('#va','background:url(data:,String.fromCharCode)');var uu=null;var r=document.styleSheets;for(var i=0;i