在解决几何问题时,定义用于在2D平面或欧几里得平面上指定点的点类非常耗时。因此,本文指定了一种使用C++中来自STL的复杂类来实现相同方法的更快,更聪明的方法。
在实施之前,必须了解什么是复数以及它们如何帮助表示2D平面上的点。
什么是复数?
复数的形式为
a + bi
where, a is the real part
b is the imaginary part
从图中可以看出,复数可以在2D平面上表示。因此,对于点(a,b),我们可以有一个复数a + bi,其中a是X坐标,b是Y坐标。
重要说明: i 2 = -1
- 复数的极坐标形式:可视化和表示复数的另一种方式是极坐标形式。极坐标形式使用’r’形式的复数的大小和’θ’形式的复数的方向。
那么具有这些参数的复数为r(cosθ+isinθ)。
注意:θ被认为是弧度。reiθ = r(cosθ+isinθ)
- 共轭复数:
如果z = a + bi,则z的共轭为z’= a – bi。
如果z =(r,θ),则z的共轭为z’=(r,-θ)
复数的共轭可用于获得某些特殊属性,如下所示:- z + z’=(a + bi)+(a – bi)= 2a
实部=(复数+共轭)/ 2 - z – z’=(a + bi)–(a – bi)= 2b
虚部=(复数–共轭)/ 2 - z * z’=(a + bi)*(a – bi)= a2 – b2i2 + 2abi – 2abi = a2 + b2
幅度2 =复数*共轭
- z + z’=(a + bi)+(a – bi)= 2a
如何使用复数?
让我们考虑欧几里得平面上的点P(a,b)。现在我们使一个复数z = a + bi并得出两者之间的等价关系。与P关联的一些属性是:
- P的X坐标:我们可以简单地说X坐标= a。因此,返回z的实部。
- P的Y坐标:我们可以简单地说Y坐标= b。因此,返回z的虚部。
- P到原点的距离(0,0): P到原点的距离= sqrt((a-0) 2 +(b-0) 2 )= sqrt(a 2 + b 2 )
z的幅度= sqrt(a 2 + b 2 )
因此,返回z的大小。 - OP与X轴的夹角,其中O是原点: OP与X轴的夹角= tan -1 (b / a)
参数,即z的参数theta可以如下得出:
rcosθ= a…..(i)
rsinθ= b…..(ii)
(ii)除以(i)
tanθ=(b / a)
θ= tan -1 (b / a)
因此,返回z的参数。 - P绕原点旋转:绕原点旋转点不会改变其与原点的距离,而只会改变PO与X轴的夹角。
因此,如果我们考虑极数形式的复数,则可以更好地理解旋转当量。
z = reiθ
让点沿逆时针方向旋转“α”。
点现在变成重I(θ+α)=重新Iθ* 1EIα= Z * 1EIα
因此,返回z * polar(1,α)。
其中,polar(r,θ)是一般表示。
让我们考虑欧几里得平面上的点P(a,b)和Q(c,d)。基本上可以将其视为向量,其长度等于X轴所确定的距原点和方向的距离。 (如果将点作为向量,则可以更好地理解许多属性,这是各种几何算法中的关键思想之一)。
现在让我们考虑z1 = a + bi和z2 = c + di。
与P和Q相关的一些属性是:
- 向量加法:
(a, b) + (c, d) = (a + c, b + d) z1 + z2 = (a + bi) + (c + di) = (a + c) + (b + d)i
因此,返回z1 + z2。
- 向量减法:只需返回
z1 – z2
- PQ线的斜率:
z2 – z1 gives the angle of elevation
因此,线PQ的斜率由仰角的切线给出。
因此,返回z2 – z1的参数的正切值。 - 欧氏距离:
Distance of P from Q = sqrt((a-c)2 + (b-d)2) Magnitude of z1 – z2 = sqrt((a-c)2 + (b-d)2)
因此,返回z1 – z2的大小。
An important construction which will be used frequently in geometric problems is z1’z2. Let’s compute this: z1’ = a – bi z1’z2 = (a – bi)*(c + di) = ac + adi – bci + bd = (ac + bd) + (ad – bc)i
- 点积:向量P和Q的点积为
(ac + bd)
这与上述构造的实际部分相同。因此,返回z1’z2的实部。
- 跨产品:跨产品的向量P和Q的幅度
(ad – bc)
这与上述构造的假想部分相同。因此,返回z1’z2的虚部。
Set 2中涵盖了复杂类的实现部分