|
本帖最后由 lee1892 于 2014-10-21 17:09 编辑
相关帖子:美丽的数学 之 奇妙的分形
在前面的贴中提到了复平面的概念,此贴将会由基础知识逐渐展开讨论。
一、高中的数学知识的复习
附件:
复平面_之_高中的数学_By Lee1892.rar
(17.26 KB, 下载次数: 242)
我们知道可以用复数来代表复平面中的点,于是在解析几何中涉及的所有计算都可以转化成复数的计算来完成。
首先,需要编写一套基本的复数基本四则运算函数集,附件中包括如下内容:
- ' /================================================\ '
- ' 复数计算的基本函数集 '
- ' By Lee1892, 2014.10.13 '
- ' |================================================| '
- ' 函数名 返回值 参数表 功能描述 '
- ' ------------------------------------------------ '
- ' cRe 实数 cmpA 复数 复数的实数部分 '
- ' cIm 实数 cmpA 复数 复数的虚数部分 '
- ' cAbs 实数 cmpA 复数 复数的绝对值 '
- ' cCjg 复数 cmpA 复数 复数的共轭 '
- ' cUni 复数 cmpA 复数 复数的单位复数 '
- ' ------------------------------------------------ '
- ' cAdd 复数 cmpA 复数 两复数相加 '
- ' cmpB 复数 '
- ' cMin 复数 cmpA 复数 两复数相减 '
- ' cmpB 复数 '
- ' cMtp 复数 cmpA 复数 两复数相乘 '
- ' cmpB 复数 '
- ' cDvd 复数 cmpA 复数 两复数相除 '
- ' cmpB 复数 '
- ' ------------------------------------------------ '
- ' cSqr 复数 cmpA 复数 复数的开方 '
- ' bNeg 布尔 '
- ' cXr 复数 cmpA 复数 复数乘实数 '
- ' dRe 实数 '
- ' cRcp 复数 cmpA 复数 复数的倒数 '
- ' \================================================/ '
复制代码
其中,几个基本计算的几何含义:
加减法:坐标系的偏移,比如 z1+z2,表示的复数就是由点z1到z2的向量,换言之 点 z2 在坐标系由原点偏移到点z1后在新坐标系中的复数。
乘法:复数绝对值的缩放以及绕原点的旋转,计复数的绝对值为 |z|,计复数的单位向量为 I (z) = z / |z| 其与X轴夹角为a,则 z1 * z2 表示 z1 的绝对值放大了 |z2| 倍,并旋转了 a 角度。
除法另外讨论。
于是,可以很容易获得下列基本的点线间的函数:
1、两点距离:
- Public Function geoDist(pntA As COMPLEX, pntB As COMPLEX) As Double
- geoDist = cAbs(cMin(pntA, pntB))
- End Function
复制代码
2、点到线的垂足:
- Public Function geoPedl(pntLnA As COMPLEX, pntLnB As COMPLEX, pntX As COMPLEX) As COMPLEX
- Dim cTemp As COMPLEX
- cTemp = cMin(pntLnB, pntLnA)
- cTemp = cUni(cTemp)
- geoPedl = cMtp(cMin(pntX, pntLnA), cCjg(cTemp))
- geoPedl = cXr(cTemp, cRe(geoPedl))
- geoPedl = cAdd(geoPedl, pntLnA)
- End Function
复制代码
3、点到线的垂直距离:
- Public Function geoDistPnToLn(pntLnA As COMPLEX, pntLnB As COMPLEX, pntX As COMPLEX) As Double
- Dim cTemp As COMPLEX
- cTemp = cMin(pntLnB, pntLnA)
- cTemp = cUni(cTemp)
- geoDistPnToLn = Abs(cIm(cMtp(cMin(pntX, pntLnA), cCjg(cTemp))))
- End Function
复制代码
4、两线交点:
- Public Function geoItsc(pntLnA_1 As COMPLEX, pntLnA_2 As COMPLEX, _
- pntLnB_1 As COMPLEX, pntLnB_2 As COMPLEX) As COMPLEX
- Dim rDist1 As Double, rDist2 As Double, rLen As Double
- rDist1 = geoDistPnToLn(pntLnA_1, pntLnA_2, pntLnB_1) ' 点 B_1 到线A的距离
- rDist2 = geoDistPnToLn(pntLnA_1, pntLnA_2, pntLnB_2) ' 点 B_2 到线A的距离
- rLen = geoDist(pntLnB_1, pntLnB_2) * rDist1 / (rDist1 + rDist2) ' 点 B_1 到交点的距离
- geoItsc = cMin(pntLnB_2, pntLnB_1) ' 点 B_1 到 点 B_2 的向量
- geoItsc = cXr(cUni(geoItsc), rLen) ' 点 B_1 到 交点的向量
- geoItsc = cAdd(geoItsc, pntLnB_1)
- End Function
复制代码
附件演示了上述几个函数。
另外,此贴估计会写得很慢~~~
|
评分
-
2
查看全部评分
-
|