Script Setup
#A = (0.5, 0.5, 0)
#B = (0.5, 0.5, 0)
#C = (0.1, 0.5, 0)
#D = (0, 0.5, 0)
#A = (0.5, 0.5, 0)
#B = (0.5, 0.5, 0)
#C = (0.5, 0.5, 0)
#D = (0.5, 0, 0)
#A = (0.5, 0, 0.5)
#B = (0.5, 0, 0.5)
#C = (0.5, 0, 0.5)
#D = (0, 0, 0.5)
A = (1, 0.5, 0.5)
B = (0.5, 0.5, 0.5)
C = (0.75, 1, 0.666)
D = (0.8, 1, 0.333)
functionRed(x) = x(A) + x(B) * cos(2pi(x(C) * x + x(D)))
functionGreen(x) = y(A) + y(B) * cos(2pi(y(C) * x + y(D)))
functionBlue(x) = z(A) + z(B) * cos(2pi(z(C) * x + z(D)))
map(v, x, y, z, w) = z + (v - x) * (w- z) / (y - x)
Fx(x, y, z) = (x-2.5)/((x-2.5)^2 + (y)^2+ (z)^2) - (x+2.5)/((x+2.5)^2 + (y)^2+ (z)^2)
Fy(x, y, z) = (y-0)/((x-2.5)^2 + (y)^2+ (z)^2)- (y+0)/((x+2.5)^2 + (y)^2+ (z)^2)
Fz(x, y, z) = (z-0)/((x-2.5)^2 + (y)^2+ (z)^2)- (z+0)/((x+2.5)^2 + (y)^2+ (z)^2)
L = Sequence(-4 + 8k / 7, k, 0, 7)
#Sequence(k, k, -4, 4, 2)
LP = Flatten( Zip( Zip( Zip( (a, b, c), a, L ), b, L ), c, L ) )
s = 1
VF0 = Zip(Translate(s*(Fx(P), Fy(P), Fz(P)), P), P, LP)
VL = Zip(abs(V), V, VF0)
VA = Zip(map(val, 0, 1*Max(VL), 1, 0), val, VL)
VF = Zip(Translate(UnitVector(s*(Fx(P), Fy(P), Fz(P))), P), P, LP)
m = Length(VF)
Execute(Zip("Q"+k+" = Element(VF, "+k+")", k, 1..m))
Execute(Zip("SetDynamicColor(Q"+i+",Min(1, Max(0, functionRed(Element(VA, "+i+")))),Min(1, Max(0, functionGreen(Element(VA, "+i+")))), Min(1, Max(0, functionBlue(Element(VA, "+i+")))),1)",i,1..m))