我有一条坐标为 X1、Y1、X2、Y2 的线。有一个圆,坐标为 X3,Y3,半径为 R。
我怎样才能确定这条线是否穿过圆?只允许使用数学公式,不允许使用各种编程语言的“函数”。
我有一条坐标为 X1、Y1、X2、Y2 的线。有一个圆,坐标为 X3,Y3,半径为 R。
我怎样才能确定这条线是否穿过圆?只允许使用数学公式,不允许使用各种编程语言的“函数”。
平面上有两个点,需要计算距离和方向角,角度要用量角器的刻度来表示(把圆分成6000份)。
计算距离没有问题,我使用欧几里得距离来计算:
ΔX = x1 - x2
ΔY = y1 - y2
距离 = sqrt(ΔX^2 + ΔY^2)(距离也是半径)
该角度计算为 ΔY / ΔX 的反正切,结果值以弧度为单位,然后转换为度。
问题是:如果将一个圆分成 6000 个等份,那么一度内有 16.6 (6) 个量角器等份
因此,如果反正切是 45 度,我可以将 45 度乘以 16.6 并得到量角器的数值吗?
问题的本质是求某个物体可见区域内的点数。可见区域是一个梯形。
一个对象数组(图中只有一个对象),每个对象包含以下数据:单位坐标,图中取为(0, 0)。半径向量r
。两侧之间的视角(角度АОВ
)。从对象到最近剪切边界(段AB
)和到远剪切边界(段CD
)的距离。具有点坐标的数组。
数据本身代表以下两类:
struct Point
{
float x;
float y;
};
struct Unit
{
Point position; // позиция игрока
Point direction; // радиус-вектор направления взгляда
float fov_deg; // угол зрения в градусах (между боковыми сторонами)
float z_near, z_far; // ближняя и дальняя границы отсечения
};
我们需要实现一个函数来计算所有单元可见区域中的点数。
int Task::calc_visible_points(const std::vector<Unit> &input_units, const std::vector<Point>& &points)
{
}
我首先想到的是找到所得梯形的顶点坐标并找到这些顶点内的点。但我有限的数学知识只能帮助我计算 Ox 和 Oy 之间的向量角度r
,线段中间的坐标AB
,CD
它们也是点M
和N
。接下来我推理:知道向量,r
我可以将其移动等于角度 的角度MOB
,我将得到某种向量BD
,我需要找到的线段 位于其上。我还可以将矢量移动线段所在AOM
的角度AC
。接下来,找到梯形的顶点作为移位向量与线段AB
和CD
或AC
和 的交点BD
。也许有人能够补充我的方法或将其推向另一种选择。
五位同学 - Anya、Dasha、Alla、Lisa 和 Nastya - 决定从他们的名字开始查找阶乘。
Anya 很快就找到了自己的名字:数字 16641 的阶乘以数字 11533 开头,这对应于用俄语字母表中的数字替换 Anya 名字的每个字母。
大傻是下一个:46978!以51261开头,对应Dasha这个名字。
然后阿拉找到了她的:323172!以 113131 开头,对应于名字 Alla。
甚至丽莎也成功了:266538!以 131091 开头,对应于名字 Lisa。纳斯秋哈有点不走运——要么滑雪板坏了,要么程序很糟糕。
我该如何帮助纳斯坚卡?
换句话说,您需要找到一个自然数,其十进制阶乘以数字 151192033 开头,对应于名字 Nastya。
您需要为对数图的点着色,但就好像它们不是对数的一样。
z
让图表上显示的某个值取值从a
到b
。我编译了 colormap - 一个函数,它根据传递给它的 0 到 1 范围内的数值来计算并返回颜色。让我们这样说:
table = [
# x R G B
[0, 0.01, 0.043, 1],
[0.2, 0.641, 0.164, 0.725],
[0.3, 0.988, 0.051, 0.11],
[0.5, 1, 0.975, 0.5],
[0.8, 1, 1, 1],
[1, 1, 1, 1]
]
为了计算每个特定点的颜色,我将其调整到所需的范围:
并绘制图表(以下为伪代码):
plot(values=z, colormap=colormap) # значения x для цвета рассчитываются внутри построителя
所有点的颜色都正确:
现在我取该值的对数z
并绘制图表:
plot(values=ln(z), colormap=colormap)
该图绘制正确,但我想让颜色与不使用对数时的颜色相同。
由于颜色是由构建器计算的,我只能更改颜色图。因此,我们需要以某种方式更改第一个颜色图列的值。
该值z'=ln(z)
可以取从a'=ln(a)
到 的值b'=ln(b)
。我们得到:
接下来,我命令我的家养小精灵弄清楚如何x'
用已知x
和未知来表达z
,,,但无论克利切如何努力a
,b
他都做不到。例如,如果将这两个方程相加,您将得到:
没有办法将z
其删除。我的直觉告诉我有一个解决方案,但我没有看到。a
b