Alexey Ivanov

## 1185 Reputation

12 years, 77 days

## Direct kinematics problem...

For the Stewart platform, the direct kinematics problem is much more complicated than the inverse one. And you have a problem with direct kinematics. Yes, its solution can be approached without trigonometry, but for each set of lengths of all six legs there will be several solutions (even, perhaps, several dozen solutions).
For example. If you create a simple system of polynomial equations for the coordinates of three points on the platform (as for a rigid body), then the RootFinding[Isolate] procedure (it finds all real solutions) will solve it. From the entire set of solutions, you can choose one based on the criterion of proximity to the previous position of the platform.
A system of 9 equations for 9 variables (coordinates of three points on the platform): three equations are the distances between points on the platform and six equations are the distances from fixed points (this is where leg lengths are taken into account).

## allvalues...

`allvalues(solve(f(x) = 0, x, allsolutions));`
```restart;
f := sin(x)/x;
allvalues(solve(f, x, allsolutions));```

## For example, Draghilev's method...

Draghilev's method  is a numerical-analytical method for solving underdetermined systems of equations.
In this case, we have an analytical solution.
PLAN_CURVE_3d_1.mw

## If I understood correctly...

```restart;
foo := proc (a, b) local x, y;
x := a^2-b; y := b^2-a;
x, y, " tests on return" end proc:
C := foo(6, 3):
a := `A,B&Assign;`:
print(a, C[1], C[2], C[3])```

## There is also a function specifically fo...

For example, such an option

```restart;
N := 60; L := 10; a := 2*10^(-12);
ns := [.9603, .9647, .9691];
eqn := proc (A) options operator, arrow; ns[i]-1+(N/A+(A*L)^(L/(1-L)))^((1-L)/L)*(2+a*exp((N/A+(A*L)^(L/(1-L)))^(1/L))/(A*L*(N/A+(A*L)^(L/(1-L)))^((L-1)/L)+a*exp((N/A+(A*L)^(L/(1-L)))^(1/L))))/(A*L) end proc:
for i to nops(ns)
do
RootFinding:-NextZero(eqn, 1.*10^(-10))
end do```

9.300682772*10^(-10)
3.054144321*10^(-9)
1.172662805*10^(-8)

## Where is the value of U0?...

```restart;
U0 := 110; #for instance
U := U0*exp(-(1/10)*t)*cos(2*t);
plot(U, t = -25 .. 50);
smartplot(U)```
```restart; U0 := 110;
U := t-> U0*exp(-(1/10)*t)*cos(2*t);
plot(U(t), t = -25 .. 50);
smartplot(U(t))```

## Maybe RootFinding [Isolate]?...

I suspect that we are talking about real solutions.

## It seems that it will be closer to the t...

```restart;
f := exp(t)+exp(-t^2-2*t);
g := exp(-t^2)+exp(-t^2-2*t);
solve([f-g], t);
plot([f, g], t = -3 .. 3, discont = true, color = [red, blue])```

You have one equation with three variables, It has a periodic solution in the form of inclined "tubes". Solution for a single "tube" can be obtained numerically using the Draghilev method, or another numerical method. After that, you can select the desired range for each variable from the resulting set of solutions.
In Maple Pi, not pi.

```restart; with(plots):
f := cos(2*Pi*(x+y-2*z))+cos(2*Pi*(y+z-2*x))+cos(2*Pi*(z+x-2*y));
#solve({f, 0 <= x, x <= 1, y <= 1, z <= 1, x < y, y < z}, [x, y, z], explicit);
implicitplot3d(f, x = -.5 .. .5, y = -.5 .. .5, z = -.5 .. .5, axes = normal, numpoints = 5000, color = blue, transparency = .5, style = surface, scaling = constrained, axes = boxed)```

## For example...

I remember that similar questions have already arisen many times.
For example, there is such a technique

`a := `(3*Pi)/10`; print(a)`

## For example, using Draghilev's method...

In this case, this method gives a parametric solution. In the text of the program, the Draghilev method is highlighted in green.
CURVE_3d.mw
(If satisfied with numerical parameterization, the examples can be very complex. But as far as analytical parameterization is concerned, even in this case, the method can perform an example more complicated.)

## And if you do this?...

solve(r2,{ksi});  or  fsolve(r2);

## transparency...

And if just combine "transparency" and "thickness"?
For example

```restart: with(plots):
f1:=x->0.95*x;
f2:=x->0.99*x;
f3:=x->0.991*x;
p1:=plot(f1(x),x=0..2,color=red,legend = f1(x)):
p2:=plot(f2(x),x=0..2,color=blue,legend = f2(x)):
p3:=plot(f3(x),x=0..2,color=green,thickness = 10, transparency = .7, legend = f3(x)):
display(p1,p2,p3);
```

## Draghilev method...

Just in case, search for "Draghilev method" (or Dragilev here:
https://www.maplesoft.com/applications/view.aspx?SID=149514 )
The method, in particular, finds continuous solutions of systems with free variables (underdetermined systems of equations).

## For instance...

You can do this:

``` restart:
a := plot({seq((6*x-2*t)/x^2, t = 1 .. 3)}, x = -1 .. 5, y = -1 .. 6):
b := plot(3/x, x = 0 .. 5, y = -1 .. 6, color = black, thickness = 3):
plots[display](a, b)```

 1 2 3 4 5 6 Page 1 of 6
﻿