Image:Cardinal Spline Example.JPG

From Wikipedia, the free encyclopedia

Wikimedia Commons logo This is a file from the Wikimedia Commons. The description on its description page there is shown below.
Commons is a freely licensed media file repository. You can help.

La bildo estas kopiita de wikipedia:en. La originala priskribo estas:

[edit] Summary

This image is a graphical representation of a Cardinal Spline. It is drawn on a 720x480 canvas and the curve has 10 control points. The tension is set to 0.1.

The red squares repesent the position of the control points, and the red line represents the path of the curve.

The image was created with the following perl script:

use strict;
use Image::Magick;
use Math::Matrix;
use Math::Gradient qw(gradient);

my $rate        = 500;
my $tension     = 0.1;
my(@coords)     = (
                   [ 23, 24],     [123, 64],     [167,200],     [212,285],     [293,297],
                   [552,205],     [537, 71],     [358,122],     [262,130],     [238, 24]
                  );

my $image       = Image::Magick->new;           # Create new image
$image          ->Set(size=>'720x480');         # Set size
$image          ->ReadImage('xc:white');        # Make it all white
foreach my $ra_coord (@coords)                  # For every set of coords in the list
  {
  my($x,$y)     = @{$ra_coord}[0,1];            # Get the x and y
  $image        ->Draw  (
                         primitive      => 'rectangle',
                         points         => (($x-3).','.($y-3).' '.($x+3).','.($y+3)),
                         fill           => 'red'
                        );                      # Draw a small rectangle at each coord
  }
while (scalar(@coords) >= 4)                    # While there are atleast 4 entries in the list
  {
  for my $u (gradient(0,1,$rate))               # iterate from 0 to 1 in 500 steps
    {
    my($x,$y)   = &EvaluateCardinal2D(\@coords, $tension, $u);      # Hand paramaters to formula
    $image      ->Set("pixel\[$x,$y\]"=>'red'); # Set that pixel red
    }
  shift(@coords);                               # Remove the first entry of the list
  }
$image          ->Write("Cardinal_Spline_Example.JPG"); # Save image

sub EvaluateCardinal2D
  {
  my($ra_coords,$T,$u)          = @_;
  my $s                         = (1-$T)/2;
  my $u_matrix                  = new Math::Matrix      # 4 x 1
        (                               # Matrix based off the point in the curve
         [($u ** 3),    ($u ** 2),      ($u),           (1)             ]
        );
  my $cardinal_matrix           = new Math::Matrix      # 4 x 4
        (                               # Guts of the Cardinal Spline formula
         [(-1 * $s),    (2 - $s),       ($s - 2),       ($s)            ],
         [(2 * $s),     ($s - 3),       (3-(2 * $s)),   (-1 * $s)       ],
         [(-1 * $s),    (0),            ($s),           (0)             ],
         [(0),          (1),            (0),            (0)             ],
        );
  my $x_matrix                  = new Math::Matrix      # 1 x 4
        (                               # X coords for point:
         [${${$ra_coords}[0]}[0]],      # 1
         [${${$ra_coords}[1]}[0]],      # 2
         [${${$ra_coords}[2]}[0]],      # 3
         [${${$ra_coords}[3]}[0]]       # 4
        );
  my $y_matrix                  = new Math::Matrix      # 1 x 4
        (                               # Y coords for point:
         [${${$ra_coords}[0]}[1]],      # 1
         [${${$ra_coords}[1]}[1]],      # 2
         [${${$ra_coords}[2]}[1]],      # 3
         [${${$ra_coords}[3]}[1]]       # 4
        );
  my $xt        = int ($u_matrix * $cardinal_matrix * $x_matrix); # Compute for X
  my $yt        = int ($u_matrix * $cardinal_matrix * $y_matrix); # Compute for Y
  return($xt,$yt);
  }

[edit] Licensing

Public domain I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.

In case this is not legally possible:
I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.


Afrikaans | Alemannisch | Aragonés | العربية | Asturianu | Български | Català | Česky | Cymraeg | Dansk | Deutsch | Eʋegbe | Ελληνικά | English | Español | Esperanto | Euskara | Estremeñu | فارسی | Français | Galego | 한국어 | हिन्दी | Hrvatski | Ido | Bahasa Indonesia | Íslenska | Italiano | עברית | Kurdî / كوردی | Latina | Lietuvių | Latviešu | Magyar | Македонски | Bahasa Melayu | Nederlands | ‪Norsk (bokmål)‬ | ‪Norsk (nynorsk)‬ | 日本語 | Polski | Português | Ripoarisch | Română | Русский | Shqip | Slovenčina | Slovenščina | Српски / Srpski | Svenska | ไทย | Tagalog | Türkçe | Українська | Tiếng Việt | Walon | ‪中文(简体)‬ | ‪中文(繁體)‬ | zh-yue-hant | +/-

The above source code is released under the same conditions as the image itself. (PD by owner)

date/time username edit summary
16:46, 1 March 2006 en:User:HighInBC (adjusted pretty printing)
16:42, 1 March 2006 en:User:HighInBC (Made code comments more informative)
16:40, 1 March 2006 en:User:HighInBC (fixed grammatical error in code comments)
16:37, 1 March 2006 en:User:HighInBC (fixed bug)
16:33, 1 March 2006 en:User:HighInBC (Improved description)
23:35, 25 February 2006 en:User:HighInBC (<span class="autocomment"><a href="/wiki/Image:Cardinal_Spline_Example.JPG#Removed_redundent_line_in_code" title="Image:Cardinal Spline Example.JPG">→</a>Removed redundent line in code</span>)
22:43, 22 February 2006 en:User:HighInBC (<span class="autocomment"><a href="/wiki/Image:Cardinal_Spline_Example.JPG#fixed_error_in_code_comments" title="Image:Cardinal Spline Example.JPG">→</a>fixed error in code comments</span>)
22:37, 22 February 2006 en:User:HighInBC (<span class="autocomment"><a href="/wiki/Image:Cardinal_Spline_Example.JPG#Licensing" title="Image:Cardinal Spline Example.JPG">→</a>Licensing</span>)
22:36, 22 February 2006 en:User:HighInBC (<span class="autocomment"><a href="/wiki/Image:Cardinal_Spline_Example.JPG#Licensing" title="Image:Cardinal Spline Example.JPG">→</a>Licensing</span>)
22:33, 22 February 2006 en:User:HighInBC (<span class="autocomment"><a href="/wiki/Image:Cardinal_Spline_Example.JPG#fixed_up_petty_printing" title="Image:Cardinal Spline Example.JPG">→</a>fixed up petty printing</span>)
22:15, 22 February 2006 en:User:HighInBC (Created with the perl script: <CODE> use strict; use Image::Magick; use Math::Matrix; use Math::Gradient qw(gradient); my $rate = 500; my $tension = .1; my(@coords) = ( [23,24], [123,64], [167,200], [212,285], [293,297], [552,205],)

[edit] Historio de la dosiero

Legend: (cur) = this is the current file, (del) = delete this old version, (rev) = revert to this old version.

Click on date to download the file or see the image uploaded on that date.

  • (del) (cur) 00:03, 23 February 2006 . . en:User:HighInBC HighInBC ( en:User_talk:HighInBC Talk) . . 720x480 (31204 bytes) (This is an updated version with less jpeg artifacts)
  • (del) (rev) 23:06, 22 February 2006 . . en:User:HighInBC HighInBC ( en:User_talk:HighInBC Talk) . . 720x480 (31204 bytes)
  • (del) (rev) 22:15, 22 February 2006 . . en:User:HighInBC HighInBC ( en:User_talk:HighInBC Talk) . . 720x480 (12401 bytes) (Created with the perl script: <CODE> use strict; use Image::Magick; use Math::Matrix; use Math::Gradient qw(gradient); my $rate = 500; my $tension = .1; my(@coords) = ( [23,24], [123,64], [167,200], [212,285], [293,297], [552,205],)

File history

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

Date/TimeDimensionsUserComment
current17:50, 18 March 2006720×480 (30 KB)Maksim (La bildo estas kopiita de wikipedia:en. La originala priskribo estas: == Summary == This image is a graphical representation of a ''Cardinal Spline''. It is drawn on a 720x480 canvas and the curve has 10 control points. The tension is set to ''0.1''. Th)
No pages on the English Wikipedia link to this file. (Pages on other projects are not counted.)