hermann on Tue, 26 Dec 2023 02:17:28 +0100

 Re: norml2() with variables in vector? | GP->OpenSCAD

```Just realized that "qfminim(M,n)" does not really help.

```
After right multiplying to Q the vectors are just all integer coordinate points in sphere with radius <=n:
```
https://stamm-wilbrandt.de/images/5*17+4%5E2.png

From radius 0 ([0,0,0]), over 1 ([0,0,1], [0,1,0], ..., [-1,0,0]) to n.
All integer radii besides those of the form 4^k*7 are present.
In the screenshot only vectors with norml2()=n are blue.

OpenSCAD screenshot of file created with this command:

sos=1 p=5 q=17 sq=4 gp -q < t2.gp > t2.scad

Script:
\$ cat t2.gp

sph(coord)=print("translate(",coord,") sphere(0.25);");
col(name)=print("color(\"",name,"\",1.0)");

sos=eval(getenv("sos"));
p=eval(getenv("p")); q=eval(getenv("q")); sq=eval(getenv("sq"));

n=p*q+sq^2;
Q=qflllgram(get_tqf(n))^-1;

M=Q~*Q;
S=[x|x<-Vec(qfminim(M,n)[3]),qfeval(M,x)==n]; S=concat(S,-S);
S2=[x|x<-Vec(qfminim(M,n)[3]),qfeval(M,x)<n]; S2=concat(S2,-S2);

{
print("\$fn=20;");
if(!eval(getenv("sos")),
foreach(S,s,col("blue");sph(s~));
foreach(S2,s,sph(s~))
,
foreach(S,s,
if(vecsearch(vecsort(abs(Q*s)),sq),col("blue"));
sph((Q*s)~));
foreach(S2,s,
sph((Q*s)~)));
}
\$

Regards,

Hermann.

On 2023-12-11 22:37, hermann@stamm-wilbrandt.de wrote:
```
```On 2023-12-08 17:43, Bill Allombert wrote:
```
Ah yes, qfminim only return the solution with positive first coordinates.
```If you want the others, just negate the result:
M=v~*v;S=[x|x<-Vec(qfminim(M,101)[3]),qfeval(M,x)==101];
concat(S,-S)

Cheers,
Bill.

```
```Thanks, good to know that just negation gives the others.

I wanted to visualize the 3-dimensional coordinates, and remembered
that I did that often with OpenSCAD in the past.

While "a picture says more than 1000 words", for 3D being able
to translate, rotate and zoom is the equivalent.

In order to enable a view without installing openscad,
I did screen recording with peek.

With sos=0 the vectors before mapping with matrix v are displayed.
All points are on a plane, the blue dots are with qfeval=101,
the other dots with qfeval<101. Interesting structure:
https://stamm-wilbrandt.de/images/Peek_2023-12-11_22-24.gif

With sos=1 (sum of squares) the sum of 3 squares are displayed,
which are on sphere with radius 101:
https://stamm-wilbrandt.de/images/Peek_2023-12-11_22-21.gif

\\ sos=1 displays sum of 3 squares sphere, sos=0 the pre mapping plane
\\
\\
sph(coord)=print("translate(",coord,") sphere(0.4);");
col(name)=print("color(\"",name,"\",1.0)");

v=[-102, -107, 93; 22, 23, -20; 1, 1, -1]~;
M=v~*v;
S=[x|x<-Vec(qfminim(M,101)[3]),qfeval(M,x)==101];
S2=[x|x<-Vec(qfminim(M,101)[3]),qfeval(M,x)<101];

{
print("\$fn=20;");
if(!eval(getenv("sos")),
foreach(S,s,col("blue");sph(s~));
foreach(S2,s,sph(s~))
,
foreach(S,s,
if(vecsearch(abs(s),4),col("black"));
sph((v*s)~)))
}
pi@raspberrypi5:~ \$

Regards,

Hermann.
```
```

```