marcoconsiglio / trigonometry
PHP 支持角度和三角函数。
v2.0.0
2022-01-09 10:36 UTC
Requires (Dev)
- fakerphp/faker: ~1.16
- phpunit/phpunit: ^9.5
README
安装
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 图
phpDoc
您可以在 docs/index.html 中阅读代码文档。
