Rumah >pembangunan bahagian belakang >tutorial php >Terokai trigonometri, penjanaan nombor rawak dan banyak lagi menggunakan fungsi matematik terbina dalam PHP
Matematik asas akan digunakan secara meluas dalam proses pengaturcaraan. Apabila kita menulis kod, kita selalunya perlu membandingkan, menambah, mendarab, menolak dan membahagikan nilai yang berbeza.
Kadang-kadang matematik yang diperlukan dalam program boleh melibatkan lebih banyak. Anda mungkin perlu menggunakan fungsi logaritma, trigonometri atau eksponen. Dalam tutorial ini, saya akan membincangkan cara menggunakan setiap fungsi dalam PHP dengan contoh.
Tutorial ini akan memperkenalkan anda kepada fungsi matematik terbina dalam dalam PHP untuk melaksanakan pengiraan trigonometri, eksponen dan logaritma. Kami juga akan melihat pembundaran dan penjanaan nombor rawak.
Anda boleh menggunakan sin($angle)
, cos($angle)
untuk mengira sinus sudut berbeza yang diberikan dalam radian, nilai kosinus dan tangen, dan tan($angle)
Kesemuanya mengembalikan nilai float
dan ukuran sudut yang dihantar kepada mereka ialah. Unitnya ialah radian. sin($angle)
、cos($angle)
计算以弧度给出的不同角度的正弦、余弦和正切值,以及tan($angle)
.它们都返回 float
值,传递给它们的角度测量值以弧度为单位。
这意味着当您简单计算 tan(45)
时,您不会得到 1 作为输出,因为您实际上将计算 45 弧度处的切线值,约为 2,578度。幸运的是,PHP 有两个非常有用的函数,用于将弧度转换为角度,反之亦然。这些函数是 rad2deg()
和 deg2rad()
。因此,如果您确实想计算 45 度的正切值,则必须编写 tan(deg2rad(45))
。
值得注意的是,没有直接的 PHP 函数来计算 cosec()
、sec()
或 的值cot()
.但是,这些值只是 sin()
、cos()
和 tan()
的倒数,因此您仍然可以计算他们的价值观间接。
您还可以进行逆运算并计算三角角具有特定值的角度。这些函数称为 asin()
、acos()
和 atan()
。您必须记住的一件事是,对于任何角度,sin 和 cos 的值都不能超出 -1 到 1 的范围。这意味着 asin()
和 acos()
只能接受 -1 到 1 范围内的值作为有效参数。超出此范围的值将为您提供 NaN。
三角学有很多应用,例如确定射弹的轨迹或不同物体的高度和距离,因此,如果您正在编写模拟这些情况的代码,那么访问这些函数肯定会很有帮助。
当您想要使用径向和角度值绘制不同的元素时,这些函数也非常有用。假设您想以均匀的距离围绕一个较大的圆绘制一个圆图案。如果您读过 Envato Tuts+ 上的 PHP GD 形状教程,您可能还记得绘制任何形状都需要您以 x、y 坐标的形式传递坐标,但使用极坐标绘制圆形图案会更容易。
在这种情况下使用这些三角函数将帮助您使用 sin()
和 cos()
将极坐标转换为笛卡尔形式来绘制所需的图形。这是一个例子:
<?php $image = imagecreatetruecolor(800, 600); $bg = imagecolorallocate($image, 255, 255, 255); imagefill($image, 0, 0, $bg); $radius = 80; for($i = 0; $i < 12; $i++) { $col_ellipse = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200)); imagefilledellipse($image, 175 + 125*cos(deg2rad($i*30)), 175 + 125*sin(deg2rad($i*30)), 3*$radius/4, 3*$radius/4, $col_ellipse); imageellipse($image, 175 + 125*cos(deg2rad($i*30)), 175 + 125*sin(deg2rad($i*30)), 3.5*$radius/4, 3.5*$radius/4, $col_ellipse); $col_ellipse = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200)); imagefilledellipse($image, 575 + 150*cos(deg2rad($i*30)), 375 + 150*sin(deg2rad($i*30)), 3*$radius/4, 3*$radius/4, $col_ellipse); imageellipse($image, 575 + 150*cos(deg2rad($i*30)), 375 + 150*sin(deg2rad($i*30)), 3.5*$radius/4, 3.5*$radius/4, $col_ellipse); } $col_ellipse = imagecolorallocate($image, 255, 255, 255); imagefilledellipse($image, 175, 175, 275, 275, $col_ellipse); ?>
下图显示了上述 PHP 代码的最终结果。
PHP 还具有一些指数和对数函数。 exp($value)
函数将返回常量 e 的 float $value
次方。同样,您可以使用 log($arg, $base)
函数计算给定数字对任意底数的对数。如果省略 $base
,将使用自然底数 e 计算对数。如果你想计算一个数字以10为底的对数,你可以简单地使用函数 log10($arg)
。
您可能会发现另一个有用的函数是 pow($base, $exp)
,它返回 $base
的 $exp
.有些人可能更喜欢使用 **
运算符。表达式 $a**$b
将给出与 pow($a, $b)
相同的结果。但是,在某些情况下,使用 $a**$b
可能会得到不正确的结果。例如, -1**0.5
将为您提供 -1,这是不正确的。使用 pow(-1, 0.5)
tan(45)
anda tidak akan mendapat 1 sebagai output kerana anda sebenarnya akan mengira nilai tangen pada 45 radian, iaitu lebih kurang 2,578 Perbelanjaan . Nasib baik, PHP mempunyai dua fungsi yang sangat berguna untuk menukar radian kepada darjah dan sebaliknya. Fungsi ini ialah rad2deg()
dan deg2rad()
. Jadi jika anda benar-benar ingin mengira tangen 45 darjah, anda perlu menulis tan(deg2rad(45))
. 🎜
🎜 Perlu diingat bahawa tiada fungsi PHP langsung untuk mengira cosec()
, sec()
atau nilai cot()
Walau bagaimanapun, nilai ini hanyalah sin()
, cos(. )
dan Timbal balik tan()
supaya anda masih boleh mengira nilainya secara tidak langsung. 🎜
🎜Anda juga boleh melakukan operasi songsang dan mengira sudut segitiga dengan nilai tertentu. Fungsi ini dipanggil asin()
, acos()
dan atan()
. Satu perkara yang anda perlu ingat ialah nilai sin dan cos tidak boleh berada di luar julat -1 hingga 1 untuk sebarang sudut. Ini bermakna asin()
dan acos()
hanya boleh menerima nilai dalam julat -1 hingga 1 sebagai argumen yang sah . Nilai di luar julat ini akan memberi anda NaN. 🎜
🎜Trigonometri mempunyai banyak aplikasi, seperti menentukan trajektori peluru atau ketinggian dan jarak objek yang berbeza, jadi jika anda menulis kod yang menyerupai situasi ini, mempunyai akses kepada fungsi ini pasti akan membantu. 🎜
🎜Fungsi ini juga berguna apabila anda ingin melukis elemen berbeza menggunakan nilai jejari dan sudut. Katakan anda ingin melukis corak bulatan pada jarak genap di sekeliling bulatan yang lebih besar. Jika anda telah membaca tutorial bentuk PHP GD pada Envato Tuts+, anda mungkin ingat bahawa melukis sebarang bentuk memerlukan anda melepasi koordinat dalam bentuk koordinat x,y, tetapi lebih mudah untuk melukis corak bulat menggunakan koordinat kutub. 🎜
🎜Menggunakan fungsi trigonometri ini dalam kes ini akan membantu anda menukar koordinat kutub menggunakan sin()
dan cos()
bentuk Cartesian kepada lukis graf yang dikehendaki. Berikut adalah contoh: 🎜
<?php echo log(1000, M_E); // 6.9077552789821 echo log(1000); // 6.9077552789821 echo log(1000, 10); // 3 echo log10(1000); // 3 echo pow(121, -121); // 9.6154627930786E-253 echo pow(121, 121); // 1.0399915443694E+252 echo pow(121, 1331); // INF ?>🎜Imej di bawah menunjukkan hasil akhir kod PHP di atas. 🎜 🎜 🎜🎜Fungsi eksponen dan logaritma🎜🎜 🎜 🎜PHP juga mempunyai beberapa fungsi eksponen dan logaritma. Fungsi
exp($value)
mengembalikan pemalar e yang dinaikkan kepada kuasa apungan $value
. Begitu juga, anda boleh menggunakan fungsi log($arg, $base)
untuk mengira logaritma nombor yang diberikan kepada mana-mana asas. Jika $base
ditinggalkan, asas semula jadi e digunakan untuk mengira logaritma. Jika anda ingin mengira logaritma asas 10 nombor, anda boleh menggunakan fungsi log10($arg)
. 🎜
🎜Fungsi lain yang anda rasa berguna ialah pow($base, $exp)
, yang mengembalikan $base
code class="inline ">$exp. Sesetengah orang mungkin lebih suka menggunakan operator **
. Ungkapan $a**$b
akan memberikan hasil yang sama seperti pow($a, $b)
. Walau bagaimanapun, dalam beberapa kes, menggunakan $a**$b
mungkin memberikan hasil yang salah. Sebagai contoh, -1**0.5
akan memberi anda -1, yang tidak betul. Menilai ungkapan yang sama menggunakan pow(-1, 0.5)
akan memberikan nilai NaN yang betul. 🎜
<?php echo log(1000, M_E); // 6.9077552789821 echo log(1000); // 6.9077552789821 echo log(1000, 10); // 3 echo log10(1000); // 3 echo pow(121, -121); // 9.6154627930786E-253 echo pow(121, 121); // 1.0399915443694E+252 echo pow(121, 1331); // INF ?>
还有许多其他重要的数学函数。您可以使用 ceil(float $value)
函数将分数或小数四舍五入到最接近的整数。这会将 2.1 和 2.9 转换为 3。同样,您可以使用 floor(float $value)
函数将分数或小数舍入为最接近的整数。它将把 2.1 和 2.9 都更改为 2。
这些函数有助于轻松地对不同计算的结果进行舍入。假设您需要知道大厅可容纳多少人(根据其面积)。除法后的最终答案很可能是一个十进制数,但你不能将人分成分数,因此正确的答案将是计算值的下限值。
您经常需要将数字向上或向下舍入为最接近的整数。例如,您可能想要将 2.1 更改为 2,但将 2.9 更改为 3。这可以使用 round($value, $ precision, $mode)
函数轻松完成。 $ precision
参数确定要舍入的小数位数。默认值 0 将仅返回整数。第三个 $mode
参数用于确定如果要舍入的数字恰好位于中间会发生什么。您可以使用它来指定是否应将 3.5 更改为 3 或 4。
PHP 还有两个函数 min($values)
和 max($values)
来帮助您确定集合或数组中的最低和最高值数字。这些函数可以接受不同类型的参数,例如两个数组和一个字符串。您应该查看文档以了解如何比较它们。
<?php $hall_width = 120; $hall_length = 180; $per_person_area = 35; $hall_capacity = floor($hall_length*$hall_length/$per_person_area); // Output: The hall can only accommodate 925 people. echo 'The hall can only accommodate '.$hall_capacity.' people.'; $water_tank_volume = 548733; $bucket_volume = 305; $buckets_needed = ceil($water_tank_volume/$bucket_volume); // Output: We will need 1800 buckets of water to completely fill the tank. echo 'We will need '.$buckets_needed.' buckets of water to completely fill the tank.'; $marks = [49, 58, 93, 12, 30]; // Output: Minimum and maximum obtained marks in the exam are 12 and 93 respectively. echo 'Minimum and maximum obtained marks in the exam are '.min($marks).' and '.max($marks).' respectively.'; ?>
您还可以使用 intdiv($dividend, $divisor)
函数在 PHP 中执行整数除法。在这种情况下,除法后仅返回商的整数部分。同样,您还可以使用 fmod($dividend, $divisor)
函数获得两个参数相除后的余数或模数。返回值的大小始终小于 $divisor
的大小。
还有一些其他有用的函数,例如 is_nan($value)
、is_finite($value)
和 is_infinite($val)
可用于确定该值是否为数字,如果是数字,则确定它是有限还是无限。请记住,PHP 认为任何太大而无法放入浮点数的值都是无限的。因此 is_finite()
将返回 true
100 阶乘,但 false
1000 阶乘。
事实证明,随机数在许多情况下都非常有用。您可以使用它们为您的应用程序生成“随机”数据或在游戏中生成敌人实例等。记住这一点非常重要,我们在本节中讨论的函数都不会生成加密安全的随机数。这些功能仅适用于安全性不成问题的情况,例如向重复访问者显示随机问候文本或生成随机统计数据。
函数 rand($min, $max)
和 mt_rand($min, $max)
可以生成给定值之间的正随机整数,包括 $min
和 $max
值。当不带任何参数调用函数时,它们会生成 0 到 getrandmax()
之间的随机数。您可以 echo
getrandmax()
的值来查看这些函数在您的平台上可以生成的最大可能随机数。
函数 mt_rand()
比 rand()
快 4 倍,如果 $max
小于 $min
。从 PHP 7.1.0 开始,rand()
实际上已成为 mt_rand()
的别名。唯一的区别是,如果 $max
小于 $min
,则 rand()
仍然不会给出错误,以保持向后兼容性。
这是一个循环,用于生成 0 到 100 之间的随机值一百万次。正如您所看到的,值 0、50 和 100 大约生成了 10,000 次,并且有轻微波动。
<?php $rand_values = []; $sum = 0; $count = 1000000; for($i = 0; $i < $count; $i++) { $rand_values[$i] = mt_rand(0, 100); $sum += $rand_values[$i]; } $count_frequency = array_count_values($rand_values); // Output: 100 was randomly generated 9969 times. echo '100 was randomly generated '.$count_frequency[100].' times.'; // Output: 50 was randomly generated: 9994 times. echo '50 was randomly generated: '.$count_frequency[50].' times.'; // Output: 0 was randomly generated: 10010 times. echo '0 was randomly generated: '.$count_frequency[0].' times.'; // Output: Average of random values: 49.97295 echo 'Average of random values: '.($sum/$count); ?>
这两个函数也有自己的种子函数,称为 srand()
和 mt_srand()
,为随机数生成器提供种子。您应该记住,您只在程序中调用 srand()
和 mt_srand()
一次。在每次调用 rand()
和 mt_rand()
之前调用它们每次都会给你相同的“随机”数字。
<?php srand(215); echo rand()."\n"; // 330544099 srand(215); echo rand()."\n"; // 330544099 srand(215); echo rand()."\n"; // 330544099 echo rand()."\n"; // 138190029 echo rand()."\n"; // 1051333090 echo rand()."\n"; // 1219572487 ?>
PHP 附带了许多内置函数,可以满足您所有的日常计算需求。您可以使用这些函数自己进行稍微复杂的计算,例如 GCD、LCM 和阶乘。
Ada beberapa perkara yang perlu anda ingat apabila menggunakan fungsi ini. Sebagai contoh, nilai yang dikembalikan oleh fungsi seperti floor()
和 ceil()
ialah integer, tetapi ia masih nombor titik terapung. Begitu juga, semua fungsi trigonometri menjangkakan sudutnya berada dalam radian. Jika anda memberikan nilai sudut yang anda mahu dianggap sebagai ukuran darjah, anda akan mendapat keputusan yang salah. Oleh itu, pastikan anda menyemak dokumentasi untuk nilai pulangan dan parameter jangkaan semua fungsi ini.
Atas ialah kandungan terperinci Terokai trigonometri, penjanaan nombor rawak dan banyak lagi menggunakan fungsi matematik terbina dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!