File:Cone-fundamentals-with-srgb-spectrum.svg

From Vero - Wikipedia
Jump to navigation Jump to search

Original file (SVG file, nominally 540 × 380 pixels, file size: 5 KB)

This file is from Wikimedia Commons and may be used by other projects. The description on its file description page there is shown below.

Summary

Description
English: The Stockman and Sharpe (2000) 2° cone fundamentals, as found at Cone Fundamentals. cvrl.ucl.ac.uk. Retrieved on 2025-11-11., plotted against the most accurate sRGB spectrum I could manage. Now in SVG.
Date
Source Own work
Author BenRG
Other versions
SVG development
InfoField
 The SVG code is valid.
 This diagram was created with an unknown SVG tool.
  This diagram uses embedded text that can be easily translated using a text editor.

Licensing

Public domain I, the copyright holder of this work, release this work into the public domain. This applies worldwide.
In some countries this may not be legally possible; if so:
I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.

Perl code

use strict;
use Svg;

sub MakeGrad {
	my ($grad,$a) = @_;
	my ($lo,$hi) = ($$a[0][0], $$a[$#$a][0]);
	for my $stop (@$a) {
		$grad->stop(offset => int(($$stop[0]-$lo)/($hi-$lo)*100+0.5) . '%', 'stop-color' => $$stop[1]);
	}
}

# cone fundamentals in steps of 5nm from 390nm to 710nm, normalized to max=1000
my @lfund = (0,1,2,5,9,13,18,23,28,34,40,45,50,55,65,81,99,119,140,164,192,233,289,360,444,536,629,705,771,826,881,919,940,966,981,994,1000,992,969,956,928,886,834,775,706,631,554,480,401,328,266,213,165,125,93,69,50,36,25,18,12,8,6,4,3);
my @mfund = (0,1,2,5,9,15,22,30,39,52,65,76,87,98,116,145,176,205,236,268,304,357,428,516,616,719,817,886,936,969,995,997,977,957,918,873,814,740,653,573,493,411,334,265,205,156,117,86,62,44,31,22,15,11,7,5,3,2,2,1,1,1,0,0,0);
my @sfund = (10,24,57,122,233,381,544,674,803,904,991,992,955,860,787,738,646,516,390,290,212,161,123,89,61,43,29,19,13,8,5,3,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);

my @colorgradient1 = ([390,'#000001'],[400,'#010002'],[410,'#020007'],[420,'#060013'],[440,'#170039'],[450,'#1D004E'],[455,'#1D005B'],[460,'#18006B'],[465,'#000879'],[470,'#002061'],[480,'#00334D'],[490,'#004245'],[500,'#005446'],[520,'#007C4F'],[530,'#00884D'],[535,'#008C48'],[545,'#00912F'],[550,'#159300'],[555,'#409000'],[570,'#7E8000'],[585,'#A56400'],[595,'#B44A00'],[605,'#BA2700'],[610,'#B90C00'],[615,'#B00016'],[620,'#A4001F'],[630,'#8B0021'],[640,'#72001D'],[670,'#310009'],[680,'#220005'],[700,'#0D0001'],[710,'#070001']);
my @colorgradient2 = ([390,'#8E8D8F'],[400,'#8E8D93'],[410,'#908B9C'],[420,'#9587B6'],[430,'#9C7FDA'],[440,'#9C7DE8'],[450,'#9780E9'],[460,'#8F86E5'],[470,'#8390D5'],[490,'#68A6AA'],[500,'#55B29C'],[510,'#30C292'],[520,'#00D189'],[530,'#33D985'],[540,'#5FDB82'],[555,'#96D681'],[570,'#C5C783'],[585,'#EAB186'],[595,'#FAA088'],[605,'#FF918A'],[615,'#FA888B'],[625,'#EB848C'],[655,'#B1898D'],[670,'#9D8C8D'],[690,'#928D8E'],[710,'#8F8D8E']);

my ($bgcolor,$legendcolor,$tracecolor,$spectrum) = (qw(white black white), \@colorgradient1);
#my ($bgcolor,$legendcolor,$tracecolor,$spectrum) = (qw(black white black), \@colorgradient2);
my $graph_width = 480;
my $graph_height = 300;
my $spectrum_top_padding = 10;
my $graph_ofs_x = 40;
my $graph_ofs_y = 20;
my $image_width = $graph_ofs_x + $graph_width + 20;
my $image_height = $graph_ofs_y + $graph_height + 60;

my $svg = new Svg(width => $image_width, height => $image_height, fill => 'none');
MakeGrad($svg->defs()->linearGradient(id => 'spectrum'), $spectrum);

$svg->rect(width => $image_width, height => $image_height, fill => $bgcolor);

my $graph = $svg->group(stroke => $tracecolor, 'stroke-width' => 3, 'stroke-linecap' => 'square');
$graph->translate($graph_ofs_x, $graph_ofs_y);
$graph->rect(x => 0, y => 0, width => $graph_width, height => $graph_height, stroke => 'none', fill => 'url(#spectrum)');
for my $a (\@lfund,\@mfund,\@sfund) {
	$graph->path(d => MakePath(Interpolate([0..$#$a], $a, 4), $graph_width / $#$a, ($graph_height-$spectrum_top_padding)/-1000, 0, $graph_height, 0.25));
}
$graph->line(x1 => 0, y1 => $graph_height, x2 => $graph_width, y2 => $graph_height, stroke => $bgcolor);

my $text = $svg->group('font-family' => 'Nimbus Roman No9 L, Times, serif', 'font-size' => 20, 'text-anchor' => 'middle', stroke => 'none', fill => $legendcolor);
my $ticks = do { my $w = $graph_width+19; my $h = $graph_height+19; "M30.5,10.5l$w,0l0,${h}l-$w,0l0,-$h" };
for (my $i = 390; $i <= 710; $i += 10) {
	my $h = $i % 50 ? 3 : 6;
	my $x = $graph_ofs_x + 0.5 + $graph_width * ($i-390)/(710-390);
	my $y2 = $graph_ofs_y + $graph_height + 9.5 - $h;
	$ticks .= "M$x,10.5l0,${h}M$x,${y2}l0,$h";
	if ($i % 50 == 0) {
		$text->text(x => $x, y => $graph_ofs_y + $graph_height + 30)->add($i);
	}
}
$text->text(x => $graph_ofs_x + $graph_width * 0.5, y => $graph_ofs_y + $graph_height + 50)->add('Wavelength (nm)');
$text->text()->rotate(-90)->translate(20, $graph_ofs_y + $graph_height/2)->add('Normalized cone response (linear energy)');
my $sml_text = $text->group(fill => $tracecolor);
$sml_text->text(x => 145, y => 50)->add('S');
$sml_text->text(x => 230, y => 50)->add('M');
$sml_text->text(x => 355, y => 50)->add('L');
$svg->path(stroke => $legendcolor, 'stroke-width' => 1, d => $ticks);

$svg->write('Cone-fundamentals-with-srgb-spectrum.svg');

Captions

Add a one-line explanation of what this file represents

Items portrayed in this file

depicts

22 September 2009

image/svg+xml

15f4919b7ec6bb0f955837af49ad332379eced4e

5,063 byte

380 pixel

540 pixel

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current17:14, 23 September 2009Thumbnail for version as of 17:14, 23 September 2009540 × 380 (5 KB)wikimediacommons>BenRGuse font-family="Nimbus Roman No9 L, Times, serif"

The following 2 pages use this file: