我已经构建了一个简单的模块化比例计算器,我可以输入一个基数(比如字体大小或行高)和一个重要数字(可能是列宽,页面宽度或其他字体大小)并选择一个比例(黄金)例如,比例),计算器将显示双链标度,用于页面布局。 请参阅下面的示例
我一直在想要允许用户输入点数和皮卡,然后在其中一个中显示比例。
问题是,picas是12个基数(12个点到异食癖),我想如果我可以将输入(类似于16p6)转换为12,我可以进行计算并从那里开始。
我无法弄清楚如何在另一个基础上进行基本计算。我真的只是乱来看看我能想出什么,让我知道你是否认为我正在咆哮错误的树。
所以我的问题是如何在12号基础上进行计算?
<?php
// basic modular scale calculation
$goldenRatio = 1.618;
$baseNumber = 16;
$i = 0;
while ($i <= 10) {
echo round($baseNumber,1). "<br>";
$baseNumber = $baseNumber * $goldenRatio;
$i++;
}
echo "<hr><br>";
// Attempt at base 12 calculation
$a=base_convert(16,10,12);
$b=base_convert(12,10,12);
$r = ($a*$b);
echo $a."*".$b."=";
echo $r;
我真的只是搞砸了我能想到的东西,如果你认为我正在咆哮错误的树,请告诉我。
更新
要解决从类似'12p6'
这样的字符串将Picas转换为基点的问题,我最终使用正则表达式首先测试是否提供了Picas和Points,分割了Picas和Points。
function isPica($data) {
if (preg_match('/^[0-9]+(?i)p([0-1]?[0-9])?$/i',$data)) {
return true;
}
return false;
}
function makePoints($data) {
$data = preg_replace('/^([0-9]+)((?i)p)(([0-1]?[0-9])?)$/i','$1.$3',$data);
$data = explode('.',$data);
$points = floor($data[0] * 12);
$points = $data[1] + $points;
return $points;
}
答案 0 :(得分:1)
base_convert只转换字符串表示。您不能使用php中的base 12中的数字字符串进行计算。在处理英制单位时,你通常会有多个基地&#34;处理。所以必须手动完成。当你进行计算时,基数并不重要。
转换回原始单位。
$ points =(int)$ val%12; $ picas =(int)($ val / 12);
或
$picas = floor($val / 12);
$points = $val - 12*$picas;