HP Forums
Elastic Grids - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Software Libraries (/forum-10.html)
+--- Forum: HP Prime Software Library (/forum-15.html)
+--- Thread: Elastic Grids (/thread-83.html)



Elastic Grids - Damien - 12-14-2013 04:59 PM

Hi everyone,

Suppose we have a rubber grid...

This code gives to the grid a kind of magnify effect.
Code:

EXPORT Quadrillages164()
BEGIN
 LOCAL DI,ANg,NX,NY,XI,YI;
 RECT_P(#383838h);
 HAngle:=0;
 FOR L:=0 TO 1 DO  // L=0 vertical line, L=1 horizontal lines
  FOR I:=0 TO 20 DO // Lines
   FOR J:=0 TO 20 DO // segments of each lines
    X:=I/10-1; Y:=J/10-1;
    IF L==1 THEN 
     T:=X; X:=Y; Y:=T;
    END;
    DI:=√(X²+Y²);
    IF X<>0 THEN 
     ANg:=ATAN(Y/X) 
    ELSE 
     ANg:=π/2*SIGN(Y); 
    END;
    IF X<0 THEN 
     ANg:=ANg+π; 
    END;
    IF DI<1 THEN 
     DI:=DI^.4; // <--- try to change DI value 
    END;
    XI:=120+IP(119*DI*COS(ANg)); 
    YI:=120+IP(119*DI*SIN(ANg));
    IF J==0 THEN 
     NX:=XI; NY:=YI; 
    END;
    IF J>0 THEN 
     LINE_P(NX,NY,XI,YI,#E8B800h); 
     NX:=XI; NY:=YI; 
    END;
   END;
  END;
 END;
WAIT(-1);
END;

Or a kind of rotation effect.
Code:

EXPORT Quadrillages166()
BEGIN
 RECT_P(#383838h);
 LOCAL DI,ANg,NX,NY,XI,YI;
 FOR L:=0 TO 1 DO
  FOR I:=0 TO 20 DO
   FOR J:=0 TO 20 DO
    X:=I/10-1; Y:=J/10-1;
    IF L==1 THEN 
     T:=X; X:=Y; Y:=T;
    END;
    DI:=√(X²+Y²);
    IF X<>0 THEN 
     ANg:=ATAN(Y/X) 
    ELSE 
     ANg:=π/2*SIGN(Y); 
    END;
    IF X<0 THEN 
     ANg:=ANg+π; 
    END;
    IF DI<1 THEN 
     ANg:=ANg+π/2*(DI-1); // <---
    END;
    XI:=120+IP(119*DI*COS(ANg)); 
    YI:=120+IP(119*DI*SIN(ANg));
    IF J==0 THEN 
     NX:=XI; NY:=YI; 
    END;
    IF J>0 THEN 
     LINE_P(NX,NY,XI,YI,#E8B800h); 
     NX:=XI; NY:=YI; 
    END;
   END;
  END;
 END;
WAIT(-1);
END;
Or some kind of twist.
Replace
Code:
IF D1<1 THEN ....
By
Code:

IF DI<1 THEN 
 ANg:=ANg-π/4*SIN(2*π*(DI-1));
END;

Or try to change the loops like so:
Code:
 
 FOR L:=0 TO 0 DO
  FOR I:=0 TO 20 DO
   FOR J:=0 TO 40 DO
    X:=I/10-1; Y:=J/20-1;
     .
     .
    IF DI<1 THEN 
     ANg:=ANg-π*2*(DI-1);
    END;


Cheers,

Damien.


RE: Elastic Grids - ArielPalazzesi - 12-18-2013 06:29 PM

Very nice!!!!

Waiting for more... Wink