marcoconsiglio/trigonometry

PHP 支持角度和三角函数。

v2.0.0 2022-01-09 10:36 UTC

This package is auto-updated.

Last update: 2024-09-16 03:22:42 UTC


README

GitHub

GitHub release (latest by date)


变异测试
MSI MCC CC MSI

PHP 支持角度和三角函数。

安装

composer require marcoconsiglio/trigonometry

用法

导入此类来表示角度。

use MarcoConsiglio\Trigonometry\Angle;

导入此类来求和角度。

use MarcoConsiglio\Trigonometry\Operations\Sum;

创建角度

度、分和秒

这将从度、分和秒的值创建一个角度

$alfa = Angle::createFromValues(180, 12, 43, Angle::CLOCKWISE); // 180° 12' 43"
$alfa = new Angle(new FromDegrees(180, 12, 43, Angle::CLOCKWISE))

解析字符串

这将从其文本表示形式创建一个角度

$beta = Angle::createFromString("180° 12' 43\""); // Input from the user
$beta = new Angle(new FromString("180° 12' 43\""));

这要归功于正则表达式

Angle::ANGLE_REGEX;

该正则表达式将度和分视为整数,但秒被视为浮点数。

小数

这将从其小数表示形式创建一个角度

$gamma = Angle::createFromDecimal(180.2119); // 180.2119°
$gamma = new Angle(new FromDecimal(180.2119));

弧度

这将从其弧度表示形式创建一个角度

$delta = Angle::createFromRadiant(3.1452910063); // deg2rad(180.2119°)
$delta = new Angle(FromRadiant(3.1452910063));

创建角度时的异常

通过值创建角度超过最大值(+/-360°)时抛出 AngleOverflowException

通过字符串创建角度超过最大值(+/-360°)时抛出 NoMatchException

获取角度值

您可以从数组中获取度值(默认为简单数组,或关联数组)

$values = $alfa->getDegrees();
echo $values[0]; // Degrees
echo $values[1]; // Minutes
echo $values[2]; // Seconds
$values = $alfa->getDegrees(true);
echo $value['degrees'];
echo $value['minutes'];
echo $value['seconds'];

也存在只读属性

$alfa->degrees;   // 180
$alfa->minutes;   // 12
$alfa->seconds;   // 43
$alfa->direction; // Angle::CLOCKWISE (1)

您可以将角度转换为小数

$alfa->toDecimal(); // 180.2119

您可以将角度转换为弧度

$alfa->toRadiant(); // 3.1452910063

负角度

您也可以创建负角度!

$alfa = Angle::createFromValues(180, 12, 43, Angle::COUNTER_CLOCKWISE);
$beta = Angle::createFromString("-180° 12' 43\"");
$gamma = Angle::createFromDecimal(-180.2119); 
$delta = Angle::createFromRadiant(-3.1452910063);

比较

您可以将角度与数值、数值字符串或另一个 Angle 对象进行比较。

(大于)

$alfa = Angle::createFromDecimal(180);
$beta = Angle::createFromDecimal(90);
$gamma = Angle::createFromDecimal(360);
$alfa->isGreaterThan(90);       // true     180 >  90
$alfa->gt("90");                // true     180 >  90
$alfa->isGreaterThan($gamma);   // false    180 > 360
$alfa->gt($gamma);              // false    180 > 360

(大于或等于)

$alfa = Angle::createFromDecimal(180);
$beta = Angle::createFromDecimal(90);
$gamma = Angle::createFromDecimal(90);
$alfa->isGreaterThanOrEqual(90);        // true 180 >=  90
$alfa->gte("180");                      // true 180 >= 180
$beta->isGreaterThanOrEqual($gamma);    // true  90 >=  90
$beta->gte(90);                         // true  90 >=  90

(小于)

$alfa = Angle::createFromDecimal(90);
$beta = Angle::createFromDecimal(180);
$alfa->isLessThan(180);     // true  90 < 180
$alfa->lt(180);             // true  90 < 180
$alfa->isLessThan($beta);   // true  90 < 180
$beta->lt($alfa);           // true 180 < 90

(小于或等于)

$alfa = Angle::createFromDecimal(90);
$beta = Angle::createFromDecimal(180);
$alfa->isLessThanOrEqual(180);      // true
$alfa->lte(90);                     // true
$alfa->isLessThanOrEqual($beta);    // true
$alfa->lte($beta);                  // true

方向

正角度由类常量表示

Angle::CLOCKWISE; // 1

而负角度则由相反的类常量表示

Angle::COUNTER_CLOCKWISE; // 1

您可以切换方向

$alfa->toggleDirection();

您可以检查角度是顺时针还是逆时针。

$alfa->isClockwise();           // false
$alfa->isCounterClockwise();    // true

两个角度的代数和

Sum 类扩展了 Angle 类,因此您可以通过将其构造函数传递给 FromAngles 构建器(它是一个 SumBuilder)立即获得两个角度的代数和。

$alfa = Angle::createFromDecimal(180);
$beta = Angle::createFromDecimal(270);
$gamma = new Sum(new FromAngles($alfa, $beta));
(string) $gamma; // 90° 0' 0"

注意,如果和超过 +360° 或小于 -360°,则结果角度将更正以保持在这些限制之间。

代码文档

UML 图

您可以在 docs/classes.png 找到类图。UML class diagram

phpDoc

您可以在 docs/index.html 中阅读代码文档。