0

I am trying to plot the following shape:

enter image description here

I am starting with the following equations, then converting from XYZ to xyY:

http://www.brucelindbloom.com/index.html?Eqn_Spect_to_XYZ.html

enter image description here

Here is my POV-Ray code, which is producing wrong results:

#local nSum = 0;
#for (i, 0, 89)
    #local nSum = nSum + (xyz_table[i].y * D65_table[i]);
#end
#local xSum = 0;
#for (i, 0, 89)
    #local xSum = xSum + xyz_table[i].x * 1 * D65_table[i];
    #local ySum = 0;
    #for (j, 0, 89)
        #local ySum = ySum + xyz_table[j].y * 1 * D65_table[j];
        #local zSum = 0;
        #for (k, 0, 89)
            #local zSum = zSum + xyz_table[k].z * 1 * D65_table[k];
            #local xyYCoo = 1/nSum * <xSum, ySum, zSum>;
            #local xyYCoo = XYZ2xyY(xyYCoo);
            #local xyYCoo = <xyYCoo.x,xyYCoo.z,xyYCoo.y>;
            sphere
            {
                xyYCoo, 1/80
                pigment {color rgb x}
            }
        #end
    #end
#end

Am I handling the summations properly? I last took calculus many many years ago so I forget. I don't know if I'm supposed to loop through the tables like I have done. What should I do? Thanks!

Here are the contents to the tables:

#declare xyz_table = array[90]
{
    <0.001368000000,0.000039000000,0.006450001000>,//380
    <0.002236000000,0.000064000000,0.010549990000>,//385
    <0.004243000000,0.000120000000,0.020050010000>,//390
    <0.007650000000,0.000217000000,0.036210000000>,//395
    <0.014310000000,0.000396000000,0.067850010000>,//400
    <0.023190000000,0.000640000000,0.110200000000>,//405
    <0.043510000000,0.001210000000,0.207400000000>,//410
    <0.077630000000,0.002180000000,0.371300000000>,//415
    <0.134380000000,0.004000000000,0.645600000000>,//420
    <0.214770000000,0.007300000000,1.039050100000>,//425
    <0.283900000000,0.011600000000,1.385600000000>,//430
    <0.328500000000,0.016840000000,1.622960000000>,//435
    <0.348280000000,0.023000000000,1.747060000000>,//440
    <0.348060000000,0.029800000000,1.782600000000>,//445
    <0.336200000000,0.038000000000,1.772110000000>,//450
    <0.318700000000,0.048000000000,1.744100000000>,//455
    <0.290800000000,0.060000000000,1.669200000000>,//460
    <0.251100000000,0.073900000000,1.528100000000>,//465
    <0.195360000000,0.090980000000,1.287640000000>,//470
    <0.142100000000,0.112600000000,1.041900000000>,//475
    <0.095640000000,0.139020000000,0.812950100000>,//480
    <0.057950010000,0.169300000000,0.616200000000>,//485
    <0.032010000000,0.208020000000,0.465180000000>,//490
    <0.014700000000,0.258600000000,0.353300000000>,//495
    <0.004900000000,0.323000000000,0.272000000000>,//500
    <0.002400000000,0.407300000000,0.212300000000>,//505
    <0.009300000000,0.503000000000,0.158200000000>,//510
    <0.029100000000,0.608200000000,0.111700000000>,//515
    <0.063270000000,0.710000000000,0.078249990000>,//520
    <0.109600000000,0.793200000000,0.057250010000>,//525
    <0.165500000000,0.862000000000,0.042160000000>,//530
    <0.225749900000,0.914850100000,0.029840000000>,//535
    <0.290400000000,0.954000000000,0.020300000000>,//540
    <0.359700000000,0.980300000000,0.013400000000>,//545
    <0.433449900000,0.994950100000,0.008749999000>,//550
    <0.512050100000,1.000000000000,0.005749999000>,//555
    <0.594500000000,0.995000000000,0.003900000000>,//560
    <0.678400000000,0.978600000000,0.002749999000>,//565
    <0.762100000000,0.952000000000,0.002100000000>,//570
    <0.842500000000,0.915400000000,0.001800000000>,//575
    <0.916300000000,0.870000000000,0.001650001000>,//580
    <0.978600000000,0.816300000000,0.001400000000>,//585
    <1.026300000000,0.757000000000,0.001100000000>,//590
    <1.056700000000,0.694900000000,0.001000000000>,//595
    <1.062200000000,0.631000000000,0.000800000000>,//600
    <1.045600000000,0.566800000000,0.000600000000>,//605
    <1.002600000000,0.503000000000,0.000340000000>,//610
    <0.938400000000,0.441200000000,0.000240000000>,//615
    <0.854449900000,0.381000000000,0.000190000000>,//620
    <0.751400000000,0.321000000000,0.000100000000>,//625
    <0.642400000000,0.265000000000,0.000049999990>,//630
    <0.541900000000,0.217000000000,0.000030000000>,//635
    <0.447900000000,0.175000000000,0.000020000000>,//640
    <0.360800000000,0.138200000000,0.000010000000>,//645
    <0.283500000000,0.107000000000,0.000000000000>,//650
    <0.218700000000,0.081600000000,0.000000000000>,//655
    <0.164900000000,0.061000000000,0.000000000000>,//660
    <0.121200000000,0.044580000000,0.000000000000>,//665
    <0.087400000000,0.032000000000,0.000000000000>,//670
    <0.063600000000,0.023200000000,0.000000000000>,//675
    <0.046770000000,0.017000000000,0.000000000000>,//680
    <0.032900000000,0.011920000000,0.000000000000>,//685
    <0.022700000000,0.008210000000,0.000000000000>,//690
    <0.015840000000,0.005723000000,0.000000000000>,//695
    <0.011359160000,0.004102000000,0.000000000000>,//700
    <0.008110916000,0.002929000000,0.000000000000>,//705
    <0.005790346000,0.002091000000,0.000000000000>,//710
    <0.004106457000,0.001484000000,0.000000000000>,//715
    <0.002899327000,0.001047000000,0.000000000000>,//720
    <0.002049190000,0.000740000000,0.000000000000>,//725
    <0.001439971000,0.000520000000,0.000000000000>,//730
    <0.000999949300,0.000361100000,0.000000000000>,//735
    <0.000690078600,0.000249200000,0.000000000000>,//740
    <0.000476021300,0.000171900000,0.000000000000>,//745
    <0.000332301100,0.000120000000,0.000000000000>,//750
    <0.000234826100,0.000084800000,0.000000000000>,//755
    <0.000166150500,0.000060000000,0.000000000000>,//760
    <0.000117413000,0.000042400000,0.000000000000>,//765
    <0.000083075270,0.000030000000,0.000000000000>,//770
    <0.000058706520,0.000021200000,0.000000000000>,//775
    <0.000041509940,0.000014990000,0.000000000000>,//780
    <0.000029353260,0.000010600000,0.000000000000>,//785
    <0.000020673830,0.000007465700,0.000000000000>,//790
    <0.000014559770,0.000005257800,0.000000000000>,//795
    <0.000010253980,0.000003702900,0.000000000000>,//800
    <0.000007221456,0.000002607800,0.000000000000>,//805
    <0.000005085868,0.000001836600,0.000000000000>,//810
    <0.000003581652,0.000001293400,0.000000000000>,//815
    <0.000002522525,0.000000910930,0.000000000000>,//820
    <0.000001776509,0.000000641530,0.000000000000> //825
}

#declare D65_table = array[90]
{
    49.9755,//380
    52.3118,//385
    54.6482,//390
    68.7015,//395
    82.7549,//400
    87.1204,//405
    91.486,//410
    92.4589,//415
    93.4318,//420
    90.057,//425
    86.6823,//430
    95.7736,//435
    104.865,//440
    110.936,//445
    117.008,//450
    117.41,//455
    117.812,//460
    116.336,//465
    114.861,//470
    115.392,//475
    115.923,//480
    112.367,//485
    108.811,//490
    109.082,//495
    109.354,//500
    108.578,//505
    107.802,//510
    106.296,//515
    104.79,//520
    106.239,//525
    107.689,//530
    106.047,//535
    104.405,//540
    104.225,//545
    104.046,//550
    102.023,//555
    100,//560
    98.1671,//565
    96.3342,//570
    96.0611,//575
    95.788,//580
    92.2368,//585
    88.6856,//590
    89.3459,//595
    90.0062,//600
    89.8026,//605
    89.5991,//610
    88.6489,//615
    87.6987,//620
    85.4936,//625
    83.2886,//630
    83.4939,//635
    83.6992,//640
    81.863,//645
    80.0268,//650
    80.1207,//655
    80.2146,//660
    81.2462,//665
    82.2778,//670
    80.281,//675
    78.2842,//680
    74.0027,//685
    69.7213,//690
    70.6652,//695
    71.6091,//700
    72.979,//705
    74.349,//710
    67.9765,//715
    61.604,//720
    65.7448,//725
    69.8856,//730
    72.4863,//735
    75.087,//740
    69.3398,//745
    63.5927,//750
    55.0054,//755
    46.4182,//760
    56.6118,//765
    66.8054,//770
    65.0941,//775
    63.3828,//780
    63.8434,//785
    64.304,//790
    61.8779,//795
    59.4519,//800
    55.7054,//805
    51.959,//810
    54.6998,//815
    57.4406,//820
    58.8765//825
}
posfan12
  • 421

1 Answers1

1

Your problem is coding, not mathematics, so it really should be in Stack Exchange. But I can see it. No you should NOT be nesting your loops. In fact you need only 1 loop, where you do all four sums.

Indeed, as you seem to be taking $S_i = 1$ for all $i$, your sums for $N$ and $Y$ are identical, so $Y = 1$, and you only need to do three sums.

What you need is this (barring any syntax errors as I have no idea what language this is).

#local nSum = 0;
#local xSum = 0;
#local zSum = 0;
#for (i, 0, 89)
    #local nSum = nSum + xyz_table[i].y * D65_table[i];
    #local xSum = xSum + xyz_table[i].x * 1 * D65_table[i];
    #local zSum = zSum + xyz_table[i].z * 1 * D65_table[i];
#end
#local xSum = xSum / nSum;
#local ySum = 1;
#local zSum = zSum / nSum;
#local xyYCoo = <xSum, ySum, zSum>;
#local xyYCoo = XYZ2xyY(xyYCoo);
#local xyYCoo = <xyYCoo.x,xyYCoo.z,xyYCoo.y>;
sphere
{
    xyYCoo, 1/80
    pigment {color rgb x}
}
#end

If you ever do want $S_i \ne 1$, then you should calculate ySum in the same way as the others, with the appropriate $S_i$ value taking the place of $1$ in all three equations (which is the only reason I left it in).

Paul Sinclair
  • 43,643