Blog

eXorithm – Execute Algorithm: View / Run Algorithm countries_from_freebase

function countries_from_freebase ()
{
  // build query and issue it
  $query = array'limit'=>1000, 'type'=>'/location/country''name'=>array(), 'iso3166_1_alpha2'=>array());
  $results = freebase_query$query);
  
  // extract country names and codes from the results
  $return = array();
  foreach ($results as $result) {
    if (isset$result'iso3166_1_alpha2'][0])) {
      $return$result'iso3166_1_alpha2'][0]] = $result'name'][0];
    }
  }
  
  // sort
  asort$return);
  
  return $return

Round Corners

<?php

/**
 * round_corners
 *
 * Round the corners of an image. Transparency and anti-aliasing are supported.
 *
 * @version 0.2
 * @author Contributors at eXorithm
 * @link /algorithm/view/round_corners Listing at eXorithm
 * @link /algorithm/history/round_corners History at eXorithm
 * @license /home/show/license
 *
 * @param resource $image (GD image) 
 * @param number $radius Radius of the rounded corners.
 * @param string $color (hex color code) Color of the background.
 * @param mixed $transparency Level of transparency. 0 is no transparency, 127 is full transparency.
 * @return resource GD image
 */
function round_corners($image=null,$radius=20,$color='ffffff',$transparency='127')
{
	$width = imagesx($image);
	$height = imagesy($image);
	
	$image2 = imagecreatetruecolor($width, $height);
	
	imagesavealpha($image2, true);
	imagealphablending($image2, false);
	
	imagecopy($image2, $image, 0, 0, 0, 0, $width, $height);
	
	
	
	$full_color = allocate_color($image2, $color, $transparency);
	
	// loop 4 times, for each corner...
	for ($left=0;$left<=1;$left++) {
		for ($top=0;$top<=1;$top++) {
			
			$start_x = $left * ($width-$radius);
			$start_y = $top * ($height-$radius);
			$end_x = $start_x+$radius;
			$end_y = $start_y+$radius;
			
			$radius_origin_x = $left * ($start_x-1) + (!$left) * $end_x;
			$radius_origin_y = $top * ($start_y-1) + (!$top) * $end_y;
			
			for ($x=$start_x;$x<$end_x;$x++) {
				for ($y=$start_y;$y<$end_y;$y++) {
					$dist = sqrt(pow($x-$radius_origin_x,2)+pow($y-$radius_origin_y,2));
					
					if ($dist>($radius+1)) {
						imagesetpixel($image2, $x, $y, $full_color);
					} else {
						if ($dist>$radius) {
						  $pct = 1-($dist-$radius);
						  $color2 = antialias_pixel($image2, $x, $y, $full_color, $pct);
						  imagesetpixel($image2, $x, $y, $color2);
						}
					}
				}
			}
			
		}
	}
	
	return $image2;
}

/**
 * allocate_color
 *
 * Helper function to allocate a color to an image. Color should be a 6-character hex string.
 *
 * @version 0.2
 * @author Contributors at eXorithm
 * @link /algorithm/view/allocate_color Listing at eXorithm
 * @link /algorithm/history/allocate_color History at eXorithm
 * @license /home/show/license
 *
 * @param resource $image (GD image) The image that will have the color allocated to it.
 * @param string $color (hex color code) The color to allocate to the image.
 * @param mixed $transparency The level of transparency from 0 to 127.
 * @return mixed
 */
function allocate_color($image=null,$color='268597',$transparency='0')
{
	if (preg_match('/[0-9ABCDEF]{6}/i', $color)==0) {
		throw new Exception("Invalid color code.");
	}
	if ($transparency<0 || $transparency>127) {
		throw new Exception("Invalid transparency.");
	}
	
	$r  = hexdec(substr($color, 0, 2));
	$g  = hexdec(substr($color, 2, 2));
	$b  = hexdec(substr($color, 4, 2));
	if ($transparency>127) $transparency = 127;
	
	if ($transparency<=0)
		return imagecolorallocate($image, $r, $g, $b);
	else
		return imagecolorallocatealpha($image, $r, $g, $b, $transparency);
}

/**
 * antialias_pixel
 *
 * Helper function to apply a certain weight of a certain color to a pixel in an image. The index of the resulting color is returned. 
 *
 * @version 0.1
 * @author Contributors at eXorithm
 * @link /algorithm/view/antialias_pixel Listing at eXorithm
 * @link /algorithm/history/antialias_pixel History at eXorithm
 * @license /home/show/license
 *
 * @param resource $image (GD image) The image containing the pixel.
 * @param number $x X-axis position of the pixel.
 * @param number $y Y-axis position of the pixel.
 * @param number $color The index of the color to be applied to the pixel.
 * @param number $weight Should be between 0 and 1,  higher being more of the original pixel color, and 0.5 being an even mixture.
 * @return mixed
 */
function antialias_pixel($image=null,$x=0,$y=0,$color=0,$weight=0.5)
{
	$c = imagecolorsforindex($image, $color);
	$r1 = $c['red'];
	$g1 = $c['green'];
	$b1 = $c['blue'];
	$t1 = $c['alpha'];
	
	$color2 = imagecolorat($image, $x, $y);
	$c = imagecolorsforindex($image, $color2);
	$r2 = $c['red'];
	$g2 = $c['green'];
	$b2 = $c['blue'];
	$t2 = $c['alpha'];
	
	$cweight = $weight+($t1/127)*(1-$weight)-($t2/127)*(1-$weight);
	
	$r = round($r2*$cweight + $r1*(1-$cweight));
	$g = round($g2*$cweight + $g1*(1-$cweight));
	$b = round($b2*$cweight + $b1*(1-$cweight));
	
	$t = round($t2*$weight + $t1*(1-$weight));
	
	return imagecolorallocatealpha($image, $r, $g, $b, $t);
}

?>

eXorithm – Execute Algorithm: View / Run Algorithm plot_3d_function

function plot_3d_function ($function, $variable1, $variable2, $center_x, $center_y, $range, $z_scale, $width, $detail, $line_color, $surface_color
{
  $x1 = $center_x$range/2;
  $y1 = $center_y$range/2;
  
  $xfinal = $center_x$range/2;
  $yfinal = $center_y$range/2;
  
  // step size
  $step = $range$detail
  
  // all the polygons that make up the graph
  $polygons = array();
  
  // generate the polygons for the graph
  for ($ii=0;$ii<=$detail$ii++) {
    $x$x1+($ii$step);
    for ($jj=0;$jj<=$detail$jj++) {
      $y$y1+($jj$step);
      
      $z = evaluate_equation$function, array$variable1=>$x, $variable2=>$y))*$z_scale
      
      if (!is_nan$z) && !is_infinite$z)) {
        
        if ($ii$detail) {
          if ($jj$detail) {
            $poly = $ii$detail$jj+1;
            $polygons$poly][6] = $x
            $polygons$poly][7] = $y
            $polygons$poly][8] = $z
          }
          
          if ($jj>0) {
            $poly = $ii$detail$jj
            $polygons$poly][9] = $x
            $polygons$poly][10] = $y
            $polygons$poly][11] = $z
          }
        }
        
        if ($ii>0) {
          if ($jj$detail) {
            $poly = ($ii-1)*$detail$jj+1;
            $polygons$poly][3] = $x
            $polygons$poly][4] = $y
            $polygons$poly][5] = $z
          }
          
          if ($jj>0) {
            $poly = ($ii-1)*$detail$jj
            $polygons$poly][0] = $x
            $polygons$poly][1] = $y
            $polygons$poly][2] = $z
          }
        }
      }
    }
  }
  
  $polygons = array_values$polygons);
  
  // project each of the polygons into 2-d
  for ($i=0; $icount$polygons); $i++) {
    $points[] = project_polygon$polygons$i], -60, 180, 135, $center_x, $center_y, 0, $range, $range*2, true);
  }
  
  // scale the image somewhat
  $scale = $width*2/$range
  
  return render_polygons$points, $line_color, $surface_color, false, false, $width, $scale);
} 

eXorithm – Execute Algorithm: View / Run Algorithm soundex

function soundex ($word
{
  $letters = 'abcdefgijklmnopqrstuvxyz'
  $codes   = '012301202245501262301202'
  
  $word = strtolower$word);
  $soundex = ''
  $count = 0;
  
  for ($ii=0; $iistrlen$word); $ii++) {
    $letter = $word$ii];
    $p = strpos$letters$letter);
    if ($p!==false) {
      if ($codes$p]!==substr$soundex,-1)) {
        $soundex .= $codes$p];
        if ($codes$p]!='0'$count++; //count only consonants
        if ($count>=5) break//if we have 5 characters we're sure we can break
      }
    }
  }
  
  // add initial letter
  $init = substr$word, 0, 1);
  $p = strpos$letters$init);
  if ($p===false)
    $soundex = strtoupper$init).$soundex
  else
    $soundex = strtoupper$init).substr$soundex, 1);
  
  // get rid of the vowels
  $soundex = str_replace'0'''$soundex);
  
  // trim or pad
  if (strlen$soundex)>=4) {
    $soundex = substr$soundex, 0, 4);
  } else {
    $soundex .= str_repeat'0', 4-strlen$soundex));
  }
  
  return $soundex

eXorithm – Execute Algorithm: View / Run Algorithm isbn_hyphenate

function isbn_hyphenate ($isbn
{
  $isbnpreg_replace'/[^dX]/'''$isbn);  //remove all non-numeric chars
  
  // strip prefix from ISBN13
  if (strlen$isbn)==13) {
    $prefix = substr$isbn,0,3).'-'
    $isbn = substr$isbn,3);
  } else if (strlen$isbn)==10) {
    $prefix = ''
  } else {
    return ''
  }
  
  $unknown = substr$isbn,1,4)+0;
  $publisher = ''
  $unit = ''
  
  if (($isbn[0] == '0') || ($isbn[0] == '3') || ($isbn[0] == '4'))
  // english region 0
  // german region 3
  // japan region 4
  {
    if$unknown<=1999)
    {
      $publishersubstr$isbn,1,2);
      $unitsubstr$isbn,3,6);
    }
    elseif$unknown>=2000 && $unknown<=6999)
    {
      $publishersubstr$isbn,1,3);
      $unitsubstr$isbn,4,5);
    }
    elseif$unknown>=7000 && $unknown<=8499)
    {
      $publishersubstr$isbn,1,4);
      $unitsubstr$isbn,5,4);
    }
    elseif$unknown>=8500 && $unknown<=8999)
    {
      $publishersubstr$isbn,1,5);
      $unitsubstr$isbn,6,3);
    }
    elseif$unknown>=9000 && $unknown<=9499)
    {
      $publishersubstr$isbn,1,6);
      $unitsubstr$isbn,7,2);
    }
    elseif$unknown>=9500)
    {
      $publishersubstr$isbn,1,7);
      $unit$isbn[8];
    }
    return $prefix$isbn[0]."-"$publisher"-"$unit"-"$isbn[9];
  }
  else if ($isbn[0] == '1'
  // english region 1
  {
    if$unknown<=999)
    {
      $publishersubstr$isbn,1,2);
      $unitsubstr$isbn,3,6);
    }
    elseif$unknown>=1000 && $unknown<=3999)
    {
      $publishersubstr$isbn,1,3);
      $unitsubstr$isbn,4,5);
    }
    elseif$unknown>=4000 && $unknown<=5499)
    {
      $publishersubstr$isbn,1,4);
      $unitsubstr$isbn,5,4);
    }
    elseif$unknown>=5500 && $unknown<=8697)
    {
      $publishersubstr$isbn,1,5);
      $unitsubstr$isbn,6,3);
    }
    elseif$unknown>=8698 && $unknown<=9989)
    {
      $publishersubstr$isbn,1,6);
      $unitsubstr$isbn,7,2);
    }
    elseif$unknown>=9990)
    {
      $publishersubstr$isbn,1,7);
      $unit$isbn[8];
    }
    return $prefix$isbn[0]."-"$publisher"-"$unit"-"$isbn[9];
  }
  else
  // other regions are not fully supported
  {
    return $prefixsubstr$isbn,0,9)."-"$isbn[9];
  }

eXorithm – Execute Algorithm: View / Run Algorithm conv_isbn

function conv_isbn ($isbn
{
  $isbn = "978" . $isbn;      //add ‘978’ prefix
  $isbn = str_split$isbn);    //split into 13-element array
  $m=3;          //initialize variables
  $sum=0;
  for$i=0; $i<12; $i++)
    {
    ($m==1) ? $m=3 : $m=1;  //alternate $m between 1 & 3
    $sum+=($isbn$i]*$m);  //sum products
    }
  $isbn[12]=10-($sum%10);    //Write new check digit (10 - $sum%10)
  $isbn = implode$isbn);
  return $isbn

eXorithm – Execute Algorithm: View / Run Algorithm word_counts

function word_counts ($text$noise
{
  $words = preg_split'/[^A-Za-z]+/'strtolower$text));
  $counts = array();
  
  foreach ($words as $word) {
    if (strlen$word)>1) { // 1-letter words are ignored
      if (array_search$word$noise)===false) { // noise word?
        if (array_key_exists$word$counts)) {
          $counts$word] = $counts$word]+1;
        } else {
          $counts$word] = 1;
        }
      }
    }
  }
  
  return $counts

eXorithm – Execute Algorithm: Embed Algorithm create_gradient


Embed This Algorithm

This page will help you embed the algorithm create_gradient on a page on your own website. Just configure the inputs, then click the generate button to get a snippet of code you can paste onto your site. You have two options.

  1. You can embed the entire form. Users will be able to enter their own arguments, and will need to press the run button to execute the algorithm.
  2. You can add only the output of the algorithm to your website. There will be no argument inputs or run button.

start color Argument info
end color Argument info
size Argument info
thickness Argument info
orientation Argument info
Embed the form Embed only the output