rgbhsv.h
Go to the documentation of this file.
00001 // Copyright (c) 2014, Jan Winkler <winkler@cs.uni-bremen.de>
00002 // All rights reserved.
00003 //
00004 // Redistribution and use in source and binary forms, with or without
00005 // modification, are permitted provided that the following conditions are met:
00006 //
00007 //     * Redistributions of source code must retain the above copyright
00008 //       notice, this list of conditions and the following disclaimer.
00009 //     * Redistributions in binary form must reproduce the above copyright
00010 //       notice, this list of conditions and the following disclaimer in the
00011 //       documentation and/or other materials provided with the distribution.
00012 //     * Neither the name of Universität Bremen nor the names of its
00013 //       contributors may be used to endorse or promote products derived from
00014 //       this software without specific prior written permission.
00015 //
00016 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00017 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00018 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00019 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00020 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00021 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00022 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00023 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00024 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00025 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00026 // POSSIBILITY OF SUCH DAMAGE.
00027 
00028 /* Author: Jan Winkler */
00029 
00030 #include <iostream>
00031 #include <cstdlib>
00032 #include <cmath>
00033 
00034 using namespace std;
00035 
00051 void HSVtoRGB(float& fR, float& fG, float& fB, float& fH, float& fS, float& fV) {
00052   float fC = fV * fS; // Chroma
00053   float fHPrime = fmod(fH / 60.0, 6);
00054   float fX = fC * (1 - fabs(fmod(fHPrime, 2) - 1));
00055   float fM = fV - fC;
00056   
00057   if(0 <= fHPrime && fHPrime < 1) {
00058     fR = fC;
00059     fG = fX;
00060     fB = 0;
00061   } else if(1 <= fHPrime && fHPrime < 2) {
00062     fR = fX;
00063     fG = fC;
00064     fB = 0;
00065   } else if(2 <= fHPrime && fHPrime < 3) {
00066     fR = 0;
00067     fG = fC;
00068     fB = fX;
00069   } else if(3 <= fHPrime && fHPrime < 4) {
00070     fR = 0;
00071     fG = fX;
00072     fB = fC;
00073   } else if(4 <= fHPrime && fHPrime < 5) {
00074     fR = fX;
00075     fG = 0;
00076     fB = fC;
00077   } else if(5 <= fHPrime && fHPrime < 6) {
00078     fR = fC;
00079     fG = 0;
00080     fB = fX;
00081   } else {
00082     fR = 0;
00083     fG = 0;
00084     fB = 0;
00085   }
00086   
00087   fR += fM;
00088   fG += fM;
00089   fB += fM;
00090 }


segbot_led
Author(s): Pato Lankenau , Rolando Fernandez
autogenerated on Thu Jun 6 2019 21:37:07