2024-08-28 10:52:17 +08:00
|
|
|
|
---
|
2024-08-28 12:02:30 +08:00
|
|
|
|
title: mbcp.mp_math.angle
|
2024-08-28 10:52:17 +08:00
|
|
|
|
---
|
2024-08-28 12:02:30 +08:00
|
|
|
|
### ***class*** `Angle`
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
### ***class*** `AnyAngle`
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### *def* `__init__(self, value: float, is_radian: bool = False)`
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
任意角度。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
参数:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
value: 角度或弧度值
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
is_radian: 是否为弧度,默认为否
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
def __init__(self, value: float, is_radian: bool=False):
|
|
|
|
|
"""
|
|
|
|
|
任意角度。
|
|
|
|
|
Args:
|
|
|
|
|
value: 角度或弧度值
|
|
|
|
|
is_radian: 是否为弧度,默认为否
|
|
|
|
|
"""
|
|
|
|
|
if is_radian:
|
|
|
|
|
self.radian = value
|
|
|
|
|
else:
|
|
|
|
|
self.radian = value * PI / 180
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### `@property`
|
|
|
|
|
- #### *def* `complementary(self)`
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
余角:两角的和为90°。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
返回:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
余角
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@property
|
|
|
|
|
def complementary(self) -> 'AnyAngle':
|
|
|
|
|
"""
|
|
|
|
|
余角:两角的和为90°。
|
|
|
|
|
Returns:
|
|
|
|
|
余角
|
|
|
|
|
"""
|
|
|
|
|
return AnyAngle(PI / 2 - self.minimum_positive.radian, is_radian=True)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### `@property`
|
|
|
|
|
- #### *def* `supplementary(self)`
|
|
|
|
|
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
补角:两角的和为180°。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
返回:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
补角
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
|
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@property
|
|
|
|
|
def supplementary(self) -> 'AnyAngle':
|
|
|
|
|
"""
|
|
|
|
|
补角:两角的和为180°。
|
|
|
|
|
Returns:
|
|
|
|
|
补角
|
|
|
|
|
"""
|
|
|
|
|
return AnyAngle(PI - self.minimum_positive.radian, is_radian=True)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### `@property`
|
|
|
|
|
- #### *def* `degree(self)`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
角度。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
返回:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
弧度
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@property
|
|
|
|
|
def degree(self) -> float:
|
|
|
|
|
"""
|
|
|
|
|
角度。
|
|
|
|
|
Returns:
|
|
|
|
|
弧度
|
|
|
|
|
"""
|
|
|
|
|
return self.radian * 180 / PI
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### `@property`
|
|
|
|
|
- #### *def* `minimum_positive(self)`
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
最小正角。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
返回:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
最小正角度
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@property
|
|
|
|
|
def minimum_positive(self) -> 'AnyAngle':
|
|
|
|
|
"""
|
|
|
|
|
最小正角。
|
|
|
|
|
Returns:
|
|
|
|
|
最小正角度
|
|
|
|
|
"""
|
|
|
|
|
return AnyAngle(self.radian % (2 * PI))
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### `@property`
|
|
|
|
|
- #### *def* `maximum_negative(self)`
|
|
|
|
|
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
最大负角。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
返回:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
最大负角度
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
|
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@property
|
|
|
|
|
def maximum_negative(self) -> 'AnyAngle':
|
|
|
|
|
"""
|
|
|
|
|
最大负角。
|
|
|
|
|
Returns:
|
|
|
|
|
最大负角度
|
|
|
|
|
"""
|
|
|
|
|
return AnyAngle(-self.radian % (2 * PI), is_radian=True)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### `@property`
|
|
|
|
|
- #### *def* `sin(self)`
|
|
|
|
|
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
正弦值。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
返回:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
正弦值
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
|
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@property
|
|
|
|
|
def sin(self) -> float:
|
|
|
|
|
"""
|
|
|
|
|
正弦值。
|
|
|
|
|
Returns:
|
|
|
|
|
正弦值
|
|
|
|
|
"""
|
|
|
|
|
return math.sin(self.radian)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### `@property`
|
|
|
|
|
- #### *def* `cos(self)`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
余弦值。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
返回:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
余弦值
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@property
|
|
|
|
|
def cos(self) -> float:
|
|
|
|
|
"""
|
|
|
|
|
余弦值。
|
|
|
|
|
Returns:
|
|
|
|
|
余弦值
|
|
|
|
|
"""
|
|
|
|
|
return math.cos(self.radian)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### `@property`
|
|
|
|
|
- #### *def* `tan(self)`
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
正切值。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
返回:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
正切值
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@property
|
|
|
|
|
def tan(self) -> float:
|
|
|
|
|
"""
|
|
|
|
|
正切值。
|
|
|
|
|
Returns:
|
|
|
|
|
正切值
|
|
|
|
|
"""
|
|
|
|
|
return math.tan(self.radian)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### `@property`
|
|
|
|
|
- #### *def* `cot(self)`
|
|
|
|
|
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
余切值。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
返回:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
余切值
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
|
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@property
|
|
|
|
|
def cot(self) -> float:
|
|
|
|
|
"""
|
|
|
|
|
余切值。
|
|
|
|
|
Returns:
|
|
|
|
|
余切值
|
|
|
|
|
"""
|
|
|
|
|
return 1 / math.tan(self.radian)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### `@property`
|
|
|
|
|
- #### *def* `sec(self)`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
正割值。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
返回:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
正割值
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@property
|
|
|
|
|
def sec(self) -> float:
|
|
|
|
|
"""
|
|
|
|
|
正割值。
|
|
|
|
|
Returns:
|
|
|
|
|
正割值
|
|
|
|
|
"""
|
|
|
|
|
return 1 / math.cos(self.radian)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### `@property`
|
|
|
|
|
- #### *def* `csc(self)`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
余割值。
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
返回:
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
余割值
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #
|
2024-08-28 10:52:17 +08:00
|
|
|
|
<details>
|
2024-08-28 12:02:30 +08:00
|
|
|
|
<summary>源码</summary>
|
2024-08-28 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@property
|
|
|
|
|
def csc(self) -> float:
|
|
|
|
|
"""
|
|
|
|
|
余割值。
|
|
|
|
|
Returns:
|
|
|
|
|
余割值
|
|
|
|
|
"""
|
|
|
|
|
return 1 / math.sin(self.radian)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
2024-08-28 12:02:30 +08:00
|
|
|
|
- #### *def* `__add__(self, other: 'AnyAngle')`
|
|
|
|
|
|
|
|
|
|
- #
|
|
|
|
|
<details>
|
|
|
|
|
<summary>源码</summary>
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
def __add__(self, other: 'AnyAngle') -> 'AnyAngle':
|
|
|
|
|
return AnyAngle(self.radian + other.radian, is_radian=True)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
|
|
- #### *def* `__eq__(self, other)`
|
|
|
|
|
|
|
|
|
|
- #
|
|
|
|
|
<details>
|
|
|
|
|
<summary>源码</summary>
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
def __eq__(self, other):
|
|
|
|
|
return approx(self.radian, other.radian)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
|
|
- #### *def* `__sub__(self, other: 'AnyAngle')`
|
|
|
|
|
|
|
|
|
|
- #
|
|
|
|
|
<details>
|
|
|
|
|
<summary>源码</summary>
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
def __sub__(self, other: 'AnyAngle') -> 'AnyAngle':
|
|
|
|
|
return AnyAngle(self.radian - other.radian, is_radian=True)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
|
|
- #### *def* `__mul__(self, other: float)`
|
|
|
|
|
|
|
|
|
|
- #
|
|
|
|
|
<details>
|
|
|
|
|
<summary>源码</summary>
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
def __mul__(self, other: float) -> 'AnyAngle':
|
|
|
|
|
return AnyAngle(self.radian * other, is_radian=True)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
|
|
- #### *def* `__repr__(self)`
|
|
|
|
|
|
|
|
|
|
- #
|
|
|
|
|
<details>
|
|
|
|
|
<summary>源码</summary>
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
def __repr__(self):
|
|
|
|
|
return f'AnyAngle({self.radian}, is_radian=True)'
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
|
|
- #### *def* `__str__(self)`
|
|
|
|
|
|
|
|
|
|
- #
|
|
|
|
|
<details>
|
|
|
|
|
<summary>源码</summary>
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return f'AnyAngle({self.degree}° or {self.radian} rad)'
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
|
|
- #### `@overload`
|
|
|
|
|
- #### *def* `__truediv__(self, other: float)`
|
|
|
|
|
|
|
|
|
|
- #
|
|
|
|
|
<details>
|
|
|
|
|
<summary>源码</summary>
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@overload
|
|
|
|
|
def __truediv__(self, other: float) -> 'AnyAngle':
|
|
|
|
|
...
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
|
|
- #### `@overload`
|
|
|
|
|
- #### *def* `__truediv__(self, other: 'AnyAngle')`
|
|
|
|
|
|
|
|
|
|
- #
|
|
|
|
|
<details>
|
|
|
|
|
<summary>源码</summary>
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
@overload
|
|
|
|
|
def __truediv__(self, other: 'AnyAngle') -> float:
|
|
|
|
|
...
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
|
|
- #### *def* `__truediv__(self, other)`
|
|
|
|
|
|
|
|
|
|
- #
|
|
|
|
|
<details>
|
|
|
|
|
<summary>源码</summary>
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
def __truediv__(self, other):
|
|
|
|
|
if isinstance(other, AnyAngle):
|
|
|
|
|
return self.radian / other.radian
|
|
|
|
|
return AnyAngle(self.radian / other, is_radian=True)
|
|
|
|
|
```
|
|
|
|
|
</details>
|
|
|
|
|
|