当前位置: 面试刷题>> 移动的圆 (经典算法题500道)
### 题目补充
**题目:移动的圆**
假设在一个二维平面上,有一个圆从点 `(x0, y0)` 开始,以恒定速度 `v` 沿着直线方向 `(dx, dy)` 移动。同时,该圆有一个固定的半径 `r`。给定一个查询点 `(xq, yq)`,请编写一个程序来判断在给定的时间点 `t` 时,查询点 `(xq, yq)` 是否在圆内(包括边界上)。
**输入**:
- 圆的起始位置 `(x0, y0)`
- 圆的半径 `r`
- 圆移动的速度向量 `(dx, dy)`
- 查询点 `(xq, yq)`
- 时间点 `t`
**输出**:
- 如果在圆内(包括边界),输出 `"Yes"`;否则,输出 `"No"`。
### 示例代码
#### PHP 示例
```php
function isPointInCircle($x0, $y0, $r, $dx, $dy, $xq, $yq, $t) {
// 计算圆在时间点t的位置
$x = $x0 + $dx * $t;
$y = $y0 + $dy * $t;
// 计算查询点到圆心的距离的平方
$distanceSquared = pow($x - $xq, 2) + pow($y - $yq, 2);
// 判断是否在圆内或圆上
if ($distanceSquared <= pow($r, 2)) {
return "Yes";
} else {
return "No";
}
}
// 示例使用
$x0 = 0; $y0 = 0; $r = 5; $dx = 1; $dy = 1; $xq = 4; $yq = 4; $t = 2;
echo isPointInCircle($x0, $y0, $r, $dx, $dy, $xq, $yq, $t); // 输出 "Yes"
```
#### Python 示例
```python
def is_point_in_circle(x0, y0, r, dx, dy, xq, yq, t):
# 计算圆在时间点t的位置
x = x0 + dx * t
y = y0 + dy * t
# 计算查询点到圆心的距离的平方
distance_squared = (x - xq) ** 2 + (y - yq) ** 2
# 判断是否在圆内或圆上
if distance_squared <= r ** 2:
return "Yes"
else:
return "No"
# 示例使用
x0, y0, r, dx, dy, xq, yq, t = 0, 0, 5, 1, 1, 4, 4, 2
print(is_point_in_circle(x0, y0, r, dx, dy, xq, yq, t)) # 输出 "Yes"
```
#### JavaScript 示例
```javascript
function isPointInCircle(x0, y0, r, dx, dy, xq, yq, t) {
// 计算圆在时间点t的位置
let x = x0 + dx * t;
let y = y0 + dy * t;
// 计算查询点到圆心的距离的平方
let distanceSquared = Math.pow(x - xq, 2) + Math.pow(y - yq, 2);
// 判断是否在圆内或圆上
if (distanceSquared <= Math.pow(r, 2)) {
return "Yes";
} else {
return "No";
}
}
// 示例使用
const x0 = 0, y0 = 0, r = 5, dx = 1, dy = 1, xq = 4, yq = 4, t = 2;
console.log(isPointInCircle(x0, y0, r, dx, dy, xq, yq, t)); // 输出 "Yes"
```
**码小课网站中有更多相关内容分享给大家学习**,这些内容包括但不限于算法基础、数据结构、编程语言进阶等,欢迎访问学习。