我需要将项目的“年龄”(以天为单位)转换为十六进制值,其中最早的项目=最大颜色= D9D8C9,最近的=最小颜色= FFFFFF。将十进制转换为十六进制值
超过365岁的项目变得颜色D9D8C9。 7岁以下的物品会变色FFFFFF。
根据这些最小和最大颜色,我如何找到任何小于365天且超过7天的物品的颜色?
最后,我会用PHP来做,但伪代码的例子很好。
我需要将项目的“年龄”(以天为单位)转换为十六进制值,其中最早的项目=最大颜色= D9D8C9,最近的=最小颜色= FFFFFF。将十进制转换为十六进制值
超过365岁的项目变得颜色D9D8C9。 7岁以下的物品会变色FFFFFF。
根据这些最小和最大颜色,我如何找到任何小于365天且超过7天的物品的颜色?
最后,我会用PHP来做,但伪代码的例子很好。
从本质上讲,你正在寻找一种方式来任意地图一个范围到另一个(7-365应该被映射的FFFFFF
- D9D8D9
)。
首先第一件事情:转换十进制为十六进制是很容易的:
$age = mt_rand(1,600);
if ($age > 365) $hex = 'D9D8D9';
elseif ($age < 7) $hex = 'FFFFFF';
else $hex = str_pad(dechex($age), 6, '0', STR_PAD_LEFT);
我要做的就是简单地检查是否$age
是大于365,如果是的话,我给你的D9D8D9
不变,如果是小于7,我分配FFFFFF
。在所有其他情况下,我只是将数字转换为十六进制数,然后使用0
填充结果字符串为6个字符,因此255
将变为FF
,并填充为0000FF
。
但是为了绘制范围的范围,我们必须找出最小范围内的一个步骤如何缩放到较大的范围。这是一个简单的“三条规则”:在两个尺度上计算1的等价值,然后相乘。然后应用相同的范围界限,你就在那里。
您使用的颜色范围是FFFFFF
到D9D8D9
,或将其放入小数点:16777215
到14276809
。这给我们留下了范围为2500406
,而365-7(或358)天。因此,在我们的颜色范围内,每一天都是“值得”6984.374301676
((D9D8D9-FFFFFF)/(365-7)
)。
把它放在一起,你有2个选择:计算距离FFFFFF或D9D8D9的距离,但就结果而言,选择哪一个并不重要。
<CrLowBound> - (<value>-<VLowBound>)*<CrStep>
//or
<CrHighBound> - (<VHighBound> - <value>)*<CrStep>
两者都简单地计算颜色范围中对应于给定值的值。 CrLowBound
和CrHighBound
分别是FFF和D9D8D9,几乎相同:VLowBound
和VHighBound
分别是6和366. CrStep
是6984.374301676
。我已经解释了我是如何得到这些价值的。
$age = mt_rand(1,600);
if ($age > 365) $hex = 'D9D8D9';
elseif ($age < 7) $hex = 'FFFFFF';
else $hex = str_pad(dechex(14276809-(round((366-$dec)*6984.374301676))), 6, '0', STR_PAD_LEFT);
//Or:
$hex = str_pad(dechex(16777215-(round(($dec-6)*6984.374301676))), 6, '0', STR_PAD_LEFT);
这将更加均匀地散布在D9D8D9
到FFFFFF
范围内的颜色范围:旧的项目,越接近颜色将是D9D8D9
,越近,越接近它是FFFFFF
。
例如,如果年龄是117
,该“色”将是1A6E1D
:
//age (max-age)*worth hex
117 == 1732125 == 1a6e1d
测试用下面的代码:
function getColour($dec)
{
if ($dec > 365) return 'D9D8D9';
if ($dec < 7) return 'FFFFFF';
return strtoupper(
str_pad(
dechex(14276809-(round((366-$dec)*6984.374301676))),
6,
'0',
STR_PAD_LEFT
)
);
}
$days = range(6,366);
$colours = array();
foreach($days as $day) $colours[$day] = getColour($day);
$out = array_chunk($colours, 8);
foreach($out as $k => $chunk) $out[$k] = implode(' - ', $chunk);
echo implode('<br>', $out);
,并得到此作为输出:
FFFFFF - B3964B - B3B193 - B3CCDB - B3E824 - B4036C - B41EB4 - B439FD B45545 - B4708E - B48BD6 - B4A71E - B4C267 - B4DDAF - B4F8F7 - B51440 B52F88 - B54AD1 - B56619 - B58161 - B59CAA - B5B7F2 - B5D33A - B5EE83 B609CB - B62514 - B6405C - B65BA4 - B676ED - B69235 - B6AD7D - B6C8C6 B6E40E - B6FF57 - B71A9F - B735E7 - B75130 - B76C78 - B787C0 - B7A309 B7BE51 - B7D99A - B7F4E2 - B8102A - B82B73 - B846BB - B86203 - B87D4C B89894 - B8B3DD - B8CF25 - B8EA6D - B905B6 - B920FE - B93C46 - B9578F B972D7 - B98E20 - B9A968 - B9C4B0 - B9DFF9 - B9FB41 - BA1689 - BA31D2 BA4D1A - BA6863 - BA83AB - BA9EF3 - BABA3C - BAD584 - BAF0CC - BB0C15 BB275D - BB42A6 - BB5DEE - BB7936 - BB947F - BBAFC7 - BBCB0F - BBE658 BC01A0 - BC1CE9 - BC3831 - BC5379 - BC6EC2 - BC8A0A - BCA552 - BCC09B BCDBE3 - BCF72C - BD1274 - BD2DBC - BD4905 - BD644D - BD7F95 - BD9ADE BDB626 - BDD16F - BDECB7 - BE07FF - BE2348 - BE3E90 - BE59D8 - BE7521 BE9069 - BEABB2 - BEC6FA - BEE242 - BEFD8B - BF18D3 - BF341B - BF4F64 BF6AAC - BF85F5 - BFA13D - BFBC85 - BFD7CE - BFF316 - C00E5E - C029A7 C044EF - C06038 - C07B80 - C096C8 - C0B211 - C0CD59 - C0E8A1 - C103EA C11F32 - C13A7B - C155C3 - C1710B - C18C54 - C1A79C - C1C2E4 - C1DE2D C1F975 - C214BE - C23006 - C24B4E - C26697 - C281DF - C29D27 - C2B870 C2D3B8 - C2EF01 - C30A49 - C32591 - C340DA - C35C22 - C3776A - C392B3 C3ADFB - C3C944 - C3E48C - C3FFD4 - C41B1D - C43665 - C451AD - C46CF6 C4883E - C4A387 - C4BECF - C4DA17 - C4F560 - C510A8 - C52BF0 - C54739 C56281 - C57DCA - C59912 - C5B45A - C5CFA3 - C5EAEB - C60633 - C6217C C63CC4 - C6580D - C67355 - C68E9D - C6A9E6 - C6C52E - C6E076 - C6FBBF C71707 - C7324F - C74D98 - C768E0 - C78429 - C79F71 - C7BAB9 - C7D602 C7F14A - C80C92 - C827DB - C84323 - C85E6C - C879B4 - C894FC - C8B045 C8CB8D - C8E6D5 - C9021E - C91D66 - C938AF - C953F7 - C96F3F - C98A88 C9A5D0 - C9C118 - C9DC61 - C9F7A9 - CA12F2 - CA2E3A - CA4982 - CA64CB CA8013 - CA9B5B - CAB6A4 - CAD1EC - CAED35 - CB087D - CB23C5 - CB3F0E CB5A56 - CB759E - CB90E7 - CBAC2F - CBC778 - CBE2C0 - CBFE08 - CC1951 CC3499 - CC4FE1 - CC6B2A - CC8672 - CCA1BB - CCBD03 - CCD84B - CCF394 CD0EDC - CD2A24 - CD456D - CD60B5 - CD7BFE - CD9746 - CDB28E - CDCDD7 CDE91F - CE0467 - CE1FB0 - CE3AF8 - CE5641 - CE7189 - CE8CD1 - CEA81A CEC362 - CEDEAA - CEF9F3 - CF153B - CF3084 - CF4BCC - CF6714 - CF825D CF9DA5 - CFB8ED - CFD436 - CFEF7E - D00AC7 - D0260F - D04157 - D05CA0 D077E8 - D09330 - D0AE79 - D0C9C1 - D0E50A - D10052 - D11B9A - D136E3 D1522B - D16D73 - D188BC - D1A404 - D1BF4D - D1DA95 - D1F5DD - D21126 D22C6E - D247B6 - D262FF - D27E47 - D29990 - D2B4D8 - D2D020 - D2EB69 D306B1 - D321F9 - D33D42 - D3588A - D373D3 - D38F1B - D3AA63 - D3C5AC D3E0F4 - D3FC3C - D41785 - D432CD - D44E16 - D4695E - D484A6 - D49FEF D4BB37 - D4D67F - D4F1C8 - D50D10 - D52859 - D543A1 - D55EE9 - D57A32 D5957A - D5B0C2 - D5CC0B - D5E753 - D6029C - D61DE4 - D6392C - D65475 D66FBD - D68B05 - D6A64E - D6C196 - D6DCDF - D6F827 - D7136F - D72EB8 D74A00 - D76548 - D78091 - D79BD9 - D7B722 - D7D26A - D7EDB2 - D808FB D82443 - D83F8B - D85AD4 - D8761C - D89165 - D8ACAD - D8C7F5 - D8E33E D8FE86 - D919CE - D93517 - D9505F - D96BA8 - D986F0 - D9A238 - D9BD81 D9D8D9
年龄超过365天且超过7天?这只是你的条件? –