# Thread: I need help shrinking this function

1. Registered User
Join Date
Jun 2009
Posts
10

## I need help shrinking this function

Code:
function(r, g, b)
{
r = r / 255;
g = g / 255;
b = b / 255;
var minv = Math.min(r, g, b);
var maxv = Math.max(r, g, b);
var d    = maxv - minv;
var v = maxv;
if(d == 0)
{
var h = 0;
var s = 0;
}
else
{
s = d / maxv;
var dr = ((maxv - r) / 6 + (d / 2)) / d;
var dg = ((maxv - g) / 6 + (d / 2)) / d;
var db = ((maxv - b) / 6 + (d / 2)) / d;
h = r == maxv ? db - dg : g == maxv ? (1 / 3) + dr - db : b == maxv ? (2 / 3) + dg - dr : 0;

h = h < 0 ? h += 1 : h > 1 ? h -= 1 : h;
}
h = Math.round(h * 360);
s = Math.round(s * 100);
v = Math.round(v * 100);
return "[" + h + ", " + s + ", " + v + "]";
}
It's quite long, longer than I'd like... My only way to shrink it was to take 3 if's and make them into a nested inline if, which I am still kinda amused that it works. Any ideas?
Last edited by TheCowGoesMoo; 06-26-2009 at 03:49 PM. Reason: more random tabs?

2. Code works; charms don't.
Join Date
Jun 2007
Posts
667
How do you call this function without a name?
Code:
h = h < 0 ? h += 1 : h > 1 ? h -= 1 : h;
The assignment to h is redundant and the expression could be written:
Code:
h < 0 ? h += 1 : h > 1 ? h -= 1 : h;
It's hazardous to declare variables within conditional blocks, since it can lead to referencing of non existent variables later in the function, or as demonstrated here:
Code:
if(d == 0)
{
var h = 0;
var s = 0;
}
else
{
s = d / maxv;
In the else block, s is made global.

It would help if you'd explain the purpose of the function.

3. Registered User+
Join Date
Feb 2006
Posts
2,930
Code:
function hue(r,g,b){
var r= r/255, g = g/255, b= b/255;
var max= Math.max(r, g, b), min= Math.min(r, g, b);
var h= 0, s= 0, v= max, D=Math.round;
if(max!= min){
var d= max-min;
s= d/max;
switch(max){
case r: h= (g-b)/d +(g< b? 6: 0); break;
case g: h= (b-r)/d + 2; break;
case b: h= (r-g)/d + 4; break;
}
}
return [D(h*60), D(s*100), D(v*100)];
}
var h=hue(255,255,0)

4. Registered User
Join Date
Jun 2009
Posts
10
Originally Posted by Sterling Isfine
How do you call this function without a name?

The assignment to h is redundant and the expression could be written:

It's hazardous to declare variables within conditional blocks, since it can lead to referencing of non existent variables later in the function, or as demonstrated here:
In the else block, s is made global.

It would help if you'd explain the purpose of the function.
It's actually a function defined as \$.fn.rgb2hsv = function ...

Mrhoo, that worked perfectly. Thank you

##### Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•

"

"

## X vBulletin 4.2.2 Debug Information

• Page Generation 0.13175 seconds
• Memory Usage 2,865KB
• Queries Executed 15 (?)
Template Usage (34):
• (5)bbcode_code
• (4)bbcode_quote
• (1)footer
• (1)forumjump
• (1)forumrules
• (1)gobutton
• (4)memberaction_dropdown
• (1)navbar
• (1)navbar_moderation
• (1)navbar_noticebit
• (1)navbar_tabs
• (2)option
• (4)postbit
• (4)postbit_onlinestatus
• (4)postbit_wrapper
• (1)spacer_close
• (1)spacer_open
• (1)tagbit_wrapper

Phrase Groups Available (6):
• global
• inlinemod
• postbit
• posting
• reputationlevel
Included Files (26):
• ./global.php
• ./includes/class_bootstrap.php
• ./includes/init.php
• ./includes/class_core.php
• ./includes/config.php
• ./includes/functions.php
• ./includes/class_friendly_url.php
• ./includes/class_hook.php
• ./includes/class_bootstrap_framework.php
• ./vb/vb.php
• ./vb/phrase.php
• ./includes/functions_calendar.php
• ./includes/functions_bigthree.php
• ./includes/class_postbit.php
• ./includes/class_bbcode.php
• ./includes/functions_reputation.php
• ./includes/functions_notice.php
• ./packages/vbattach/attach.php
• ./vb/types.php
• ./vb/cache.php
• ./vb/cache/db.php
• ./vb/cache/observer/db.php
• ./vb/cache/observer.php

Hooks Called (70):
• init_startup
• friendlyurl_resolve_class
• init_startup_session_setup_start
• database_pre_fetch_array
• database_post_fetch_array
• init_startup_session_setup_complete
• global_bootstrap_init_start
• global_bootstrap_init_complete
• cache_permissions
• fetch_foruminfo
• global_state_check
• global_bootstrap_complete
• global_start
• style_fetch
• global_setup_complete
• strip_bbcode
• friendlyurl_clean_fragment
• friendlyurl_geturl
• forumjump
• cache_templates
• cache_templates_process
• template_register_var
• template_render_output
• fetch_template_start
• fetch_template_complete
• parse_templates
• notices_check_start
• notices_noticebit
• process_templates_complete
• friendlyurl_redirect_canonical
• bbcode_fetch_tags
• bbcode_create
• postbit_factory
• postbit_display_start
• postbit_imicons
• bbcode_parse_start
• bbcode_parse_complete_precache
• bbcode_parse_complete
• postbit_display_complete
• memberaction_dropdown
• tag_fetchbit_complete
• forumrules
• navbits
• navbits_complete