

It seems to me that the engine used to throw an error when this happened...
Render attached. The last orange point is out of position. Why this happens at
60 or 300 degrees and not on the other side, I don't know.
I found a possible workaround, but it's not pretty.
Watch the value of m1:
m1 = 0.500000 / 0.866025 = 0.577350
m2 = 0.327327 / 0.944911 = 0.346410
PC: <1.500000,0.866025,0.000000>
PD: <0.000000,1.732051,0.000000>
PE: <2.000000,1.732051,0.000000>
PF: <0.500000,2.598076,0.000000>
m1 = 0.500000 / 0.866025 = 0.577350
m2 = 0.654654 / 0.755929 = 0.866025
PC: <0.000000,1.732051,0.000000>
PD: <1.500000,0.866025,0.000000>
PE: <0.500000,2.598076,0.000000>
PF: <2.500000,0.866025,0.000000>
m1 = 1.000000 / 0.000000 = 3900231685776980.500000
m2 = 0.981981 / 0.188982 = 5.196152
PC: <1.500000,0.866025,0.000000>
PD: <1.500000,0.866025,0.000000>
PE: <2.500000,0.866025,0.000000>
PF: <2.000000,1.732051,0.000000>
m1 = 0.500000 / 0.866025 = 0.577350
m2 = 0.327327 / 0.944911 = 0.346410
PC: <1.500000,0.866025,0.000000>
PD: <0.000000,1.732051,0.000000>
PE: <2.000000,1.732051,0.000000>
PF: <0.500000,2.598076,0.000000>
m1 = 0.500000 / 0.866025 = 0.577350
m2 = 0.654654 / 0.755929 = 0.866025
PC: <0.000000,1.732051,0.000000>
PD: <1.500000,0.866025,0.000000>
PE: <0.500000,2.598076,0.000000>
PF: <2.500000,0.866025,0.000000>
m1 = 1.000000 / 0.000000 = 7800463371553961.000000
m2 = 0.981981 / 0.188982 = 5.196152
PC: <1.500000,0.866025,0.000000>
PD: <1.500000,0.866025,0.000000>
PE: <2.500000,0.866025,0.000000>
PF: <2.000000,1.732051,0.000000>
m1 = 1.000000 / 0.000000 = 7800463371553961.000000
m2 = 0.981981 / 0.188982 = 5.196152
Regards,
A.D.B.
Original Scene: Version 3.8.0alpha.9606898.unofficial
/*
Persistence of Vision RayTracer Scene Description File
Name: shm_20184.pov
Vers: 3.6
Desc: Spiral Honeycomb Mosaic
Date: 10  24  18
Auth: Anthony D. Baye
*/
#include "kolors.inc"
#include "math.inc"
#default { pigment { White }
finish { diffuse 0.6 specular 0.3 roughness 0.01 fresnel on } }
light_source { <2.0, 3.0, 5.0> color rgb 1 }
camera {
perspective
location <0.0, 0.0, 15.0>
up y
right (image_width/image_height)*x
look_at 0.0
}
#macro Arrow(S, D, L, C)
union {
cylinder { S, S+D*L 0.015625 }
cone { S+D*L, 0.01325, S+D*L+0.125*D, 0.0 }
pigment { C }
finish { diffuse 0.6 specular 0.3 roughness 0.05 fresnel on }
}
#end
#macro det2d(U,V)
#local retval = U.x*V.y  U.y*V.x;
retval
#end
#macro IPoint(UI1, UI2, VI1, VI2)
#local Ud = vnormalize(UI2  UI1);
#local Vd = vnormalize(VI2  VI1);
// !! The problem is here !!
#local m1 = Ud.y / Ud.x;
#local m2 = Vd.y / Vd.x;
// Workaround: ensure that xcoord is always slightly nonzero.
// Problem: This introduces a slight error which grows larger with distance.
// #local m1 = Ud.y / (Ud.x != 0 & Ud.x != 0 ? Ud.x : 0.00000000001 );
// #local m2 = Vd.y / (Vd.x != 0 & Vd.x != 0 ? Vd.x : 0.00000000001 );
#debug concat("m1 = " str(Ud.y,0,6) " / " str(Ud.x,0,6) " = " str(m1,0,6)
"\n")
#debug concat("m2 = " str(Vd.y,0,6) " / " str(Vd.x,0,6) " = " str(m2,0,6)
"\n")
#local rX = (m1*UI1.x  m2*VI1.x + VI1.y  UI1.y)/(m1  m2);
#local rY = m1*(rX  UI1.x) + UI1.y;
#local retval = <rX,rY, 0.0>;
retval
#end
#macro ShowPoints(RAD, ORDER, ADV)
#local THETA = atand(sqrt(3)/2)*(ORDER  1);
#local BP = vrotate((RAD*<cosd(60), sind(60), 0.0>  <R, 0.0,
0.0>)*pow(sqrt(7),(ORDER  1)),THETA*z);
#local A = vrotate(RAD*<cosd(60), sind(60), 0.0>*pow(sqrt(7),(ORDER 
1)),THETA*z);
#local B = vrotate((2*RAD*cosd(30))*<cosd(30), sind(30),
0.0>*pow(sqrt(7),(ORDER  1)),THETA*z);
#local G = vrotate((2*RAD*cosd(30))*<cosd(90), sind(90),
0.0>*pow(sqrt(7),(ORDER  1)),THETA*z);
#local D = B + RAD*sqrt(3)*<cosd(60), sind(60), 0.0>;
#local E = G + RAD*sqrt(3)*<cosd(120), sind(120), 0.0>;
union {
sphere { A 0.09375 pigment { Red } }
sphere { B 0.09375 pigment { Yellow } }
sphere { G 0.09375 pigment { Yellow } }
sphere { D 0.09375 pigment { Green } }
sphere { E 0.09375 pigment { Green } }
sphere { IPoint(B,G,D,E) 0.125
pigment { Orange } finish { diffuse 0.6 specular 0.3 roughness 0.05
fresnel on } }
}
#end
#declare R = 1.0;
#macro Hex(MajR)
union {
#for(I,0,300,60)
cylinder { MajR*<cosd(I), sind(I), 0.0> MajR*<cosd(I+60), sind(I+60), 0.0>
0.015625 }
#end
}
#end
#macro cMod(A, B)
#local retval = A  floor(A/B)*B;
retval
#end
#local LV0 =
Hex(R)
#macro Flag(PIG, S)
union {
cylinder { <0.0,0.0,0.0> R*S*<cosd(0), sind(0), 0.0> 0.015625 }
cylinder { <0.0,0.0,0.0> R*S*<cosd(60), sind(60), 0.0> 0.015625 }
Arrow(R*S*<1.0, 0.0, 0.0>, <cosd(60),sind(60), 0.0>  <1, 0, 0.0>,
3*R*sqrt(7), PIG)
pigment { PIG }
}
#end
#macro Point(LOC, COL)
sphere { LOC 0.0625 pigment {COL} }
#end
#declare LV1 =
union {
object { LV0 }
#for(A,0,5,1)
object { LV0 translate R*sqrt(3)*<cosd(30 + 60*A), sind(30 + 60*A), 0.0> }
#end
}
LV1
// Point(<R, 0, 0>, Yellow)
// #for(A,0,5,1)
// Point(R*sqrt(3)*<cosd(30 + 60*A), sind(30 + 60*A), 0.0>, Yellow)
//
// #end
// object { Point(R*sqrt(7)*<1.0, 0.0, 0.0>, Yellow) rotate atand(sqrt(3)/2)*z }
// object { Point(R*sqrt(7)*<1.0, 0.0, 0.0>, Yellow) rotate (atand(sqrt(3)/2) +
60)*z }
#declare PA = <R,0,0>;
#declare PB = R*<cosd(60), sind(60), 0.0>;
#declare PC = R*sqrt(3)*<cosd(30), sind(30), 0.0>;
#declare PD = R*sqrt(3)*<cosd(90), sind(90), 0.0>;
#declare PE = vrotate(PA*sqrt(7),atand(sqrt(3)/2)*z);
#declare PF = vrotate(PA*sqrt(7),(atand(sqrt(3)/2) + 60)*z);
Point(PA,Yellow)
Point(PB,Yellow)
Flag(Blue, R)
#for(A,0,5,1)
union {
object { Flag(Red, R*sqrt(3)) rotate (30.0 + 60*A)*z }
object { Flag(Green, R*sqrt(7)) rotate (atand(sqrt(3)/2) + 60*A)*z }
}
#local ORIG = IPoint(
vrotate(PC,60*A*z),
vrotate(PD,60*A*z),
vrotate(PE,60*A*z),
vrotate(PF,60*A*z)
);
#debug concat("PC: <" vstr(3,vrotate(PC,60*A*z),",",0,6) ">\n")
#debug concat("PD: <" vstr(3,vrotate(PD,60*A*z),",",0,6) ">\n")
#debug concat("PE: <" vstr(3,vrotate(PE,60*A*z),",",0,6) ">\n")
#debug concat("PF: <" vstr(3,vrotate(PF,60*A*z),",",0,6) ">\n")
Point(vrotate(PC,60*A*z),Green)
Point(vrotate(PD,60*A*z),Green)
Point(vrotate(PE,60*A*z),Yellow)
Point(vrotate(PF,60*A*z),Yellow)
Point(ORIG, Orange)
object { LV1 translate ORIG }
#end
Point(IPoint(vrotate(PC,300*z), vrotate(PD,300*z), vrotate(PE,300*z),
vrotate(PF,300*z)),Red)
Post a reply to this message
Attachments:
Download 'shm_20184.png' (126 KB)
Preview of image 'shm_20184.png'

