数学问题

突击召唤师 2002-07-19 11:15:18
问题:
计算机屏幕四个顶点(0,0) (1024,0) (0,768), (1024,768)
投影到幕布上的坐标是(a1,b1) (a2,b2) (a3,b3) (a4,b4) 均为
已知,求幕布上任意一点(x,y)在屏幕上的坐标。

提示:
屏幕是一个标准矩形,以左上角为(0,0)。投影可能是一个
倾斜的四边形,以幕布的左上角为(0,0)。

...全文
356 85 打赏 收藏 转发到动态 举报
写回复
用AI写文章
85 条回复
切换为时间正序
请发表友善的回复…
发表回复
突击召唤师 2002-08-23
  • 打赏
  • 举报
回复
上个论坛,比上火星都慢
突击召唤师 2002-08-23
  • 打赏
  • 举报
回复
结贴,FAQ之
hanqiong1 2002-08-05
  • 打赏
  • 举报
回复
不知诸位是否做过从一张图片上识别一维条形码的程序或算法。我急切需要。
联系方式:
hanqiong1@hotmail.com
hanqiong1 2002-08-05
  • 打赏
  • 举报
回复
不知诸位是否做过从一张图片上识别一维条形码的程序或算法。我急切需要。
xqr 2002-08-01
  • 打赏
  • 举报
回复
to zzwu(未名)
to quicmous(快鼠)
十分感谢你们对我的许多启示。
我们提出的具体解决办法虽有些不同,但思路和基本原理是一致的。
zzwu 2002-07-31
  • 打赏
  • 举报
回复
to xqr():

关于原像平面和像平面平行的问题,我也同意quicmous(快鼠)的看法,认为不需要.

因为,我想,如果原像平面和像平面平行,则幕布上的图像也就不会被弄成任意四边形了.


不知道我的说法有问题吗?


zzwu 2002-07-31
  • 打赏
  • 举报
回复
上面两位: 谢谢帮助!
我也深信,无论我们用什么方法,只要都能正确解决问题,那么所作的变换一定都是同一种变换!
我所好奇的,是'同素变换'这个术语,以前没有听到过,所以想了解一下起来源.是从哪一实际应用领域提出来的?
昨晚我碰到一位一生从事几何研究的几何教研组的老师,问起'同素变换'的问题. 他也说没有听到过,并'估计不会是一个数学术语',并且,正如xqr()所预料那样,'可能来自地图学界的'.


zzwu 2002-07-31
  • 打赏
  • 举报
回复

确实非常快非常快,6次乘,2次除,再是几次加,就整个完了!

zzwu 2002-07-31
  • 打赏
  • 举报
回复
to 大家:

这样好像都能统一了!

我的演示程序也可以了,如有兴趣看,我发给大家.

许野平 2002-07-31
  • 打赏
  • 举报
回复
to xqr() :
8个系数只需一次计算,同意你的说法。
xqr 2002-07-31
  • 打赏
  • 举报
回复
to zzwu(未名)
to quicmous(快鼠)

再噜囌几句。
同素变换的矩阵表达式为:
(X' Y' H)=(x y 1)T
H=px+qy+s
X=X'/H, Y=Y'/H
式中,T是3*3变换矩阵,第1,2列的作用是仿射变换(比例,对称,错移,旋转,平移等),最后一列(p q s)的作用是中心透影变换和全图比例变换。
分解上式的过程:
1.将xoy平面上的图形平移至z=1的平面,即(x y 0)->(x y 1)
2.将z=1平面上的图形(z y 1)仿射变换至H=px+qy+s的平面上,即
(x y 1)->(X' Y' H)
3.以坐标原点为透视中心,对H=px+qy+s平面上的图形点(X' Y' H)作射线,并用z=1的平面截取得z=1平面上新图像,即(X' Y' H)->(X'/H Y'/H 1)=(X Y 1),X和Y便是我们所需要的。
可见
1.上述结果图像平面与原图像平面的平行,只是为了公式推导的图解映射关系,并不代表两图像平面的真实关系。注意,它与两个平行平面间的中心投影变换不同,它不保持等比和平行性,成像仍可能为任意四变形,在实际应用中也不要求两个像平面要平行才能采用同素变换。
2.同素变换是仿射变换和中心变换的复合变换。

--------------------------------------------------------------------
to quicmous(快鼠)

按同素变换,整屏图形,计算系数(8个)只需一次(因为全图是同一种变换),不须每图形点都要重新算一次系数。在求得系数(a1,a2,a3,b1,b2,b3,c2,c3)后,每个图形点的计算量甚小,如下式
X=(a1*x+a2*y+a3)/(x+c2*y+c3)
Y=(b1*x+b2*y+b3)/(x+c2*y+c3)

许野平 2002-07-30
  • 打赏
  • 举报
回复
to zzwu(未名):
xqr() 提供的变换与我前面给出的变换是等价的。都是先把z=0平面上的图像经过一个线性变换变到一个三维空间的中间位置,然后把该图形映射到z=1平面上。不同之处是,xqr()直接略去了z和z'坐标,方程显得更为简练。

以下选自我在楼上法的帖子,可以和xqr的防城进行比较:
...
我给出的变换包含两个基本变换:
第一步:把位于xy平面上的屏幕坐标经过仿射变换转换到三维坐标系。这个变换本身包含平移、旋转等几何变换。
第二步:以三维坐标原点为光源的投影变换,投影平面是z=1,公式如下P(x,y,z)->p'(x',y',z')
x'= x/z
y'= y/z
...
x'=(a11*x+a12*y+a13*z+a14)/(a31*x+a32*y+a33*z+a34)
y'=(a21*x+a22*y+a23*z+a24)/(a31*x+a32*y+a33*z+a34)
...
断定原像平面和像平面平行,其实是误解,因为原像到像的变换是一个线性变换和摄影变换构成的复合变换。首先原像经过一个线性变换得到位置可能很“别扭”的中间像,中间像再投影到z=1平面上。正如你能看到的,我在楼上帖子里的方程式是非线性的(射影变换)。
...

计算机算法手册确实给出了解线性方程组的一般方法,问题是如果对于每一个点都要采用复杂的消元法求解,效率会成问题。因此问题的关键在于每个点坐标变换的计算效率。
xqr 2002-07-30
  • 打赏
  • 举报
回复
to zzwu(未名):

同素变换又称共线变换,属射影几何范畴,常用于地图图形的几何改正,其它领域应用不多见。其实,同素变换是二维图形空间线性变换的代数形式,可从二维齐次坐标矩阵变换公式(见下式)演变而来。
(X' Y' H)=(x y 1)T
式中,T是3*3变换矩阵,最后一列不是(0 0 1),而是任意数(p q s)
H=px+qy+s
X=X'/H, Y=Y'/H

本人曾参阅下列各书:
1.几何变换 龙泽斌编著,湖南科技出版社,1984
2.空间解析几何引论 南开大学数学系编,人民教育出版社,1978
3.计算机地图制图原理 徐庆荣等编著,武汉测绘科技大学出版社,1993
xqr 2002-07-30
  • 打赏
  • 举报
回复
to zzwu(未名):

谈谈我的认识。
1.在有关射影几何的书中可能找不到“同素变换”或“共线变换”的名词,但是这种变换方法或思想是有的。在《几何变换》的“几何变换的矩阵方法”一章中对此法谈得多些具体些。所谓“同素变换”或“共线变换”的称法我猜测可能是地图学界给它起的。
2.实际上,同素变换是将位于z=0平面上的图形变换至z=1的平面上,并保持线性关系。其变换过程似中心(透视)投影,但变换前后两图形平面总是平行的,故不同于一般的中心投影。其次,变换前后图形线段不具有等比性和平行性,故又不同于仿射变换。
3.鉴于上述,在纯中心(透视)投影条件下,采用同素变换只是一种近似处理。

以上浅见,请指正。
zzwu 2002-07-30
  • 打赏
  • 举报
回复

To xqr(): 很感谢!

<射影几何>我手头有一本老的英文书,前几天我正在看,很有趣,也是受它的启发,提出了前面那个算法. 这本书的缺点是不讲变换的,看不到一个矩阵,都用1-1对应和几何图形来说明问题.

南开的<空间解析几何引论>正好自己有,但一下子没有找到上册. 在下册有个'射影几何简介',粗翻了一下没有找到,准备再细心点看一看.

<计算机地图制图原理>则完全没有了,只得明天去图书馆找了.

再次谢谢你了.

zzwu 2002-07-29
  • 打赏
  • 举报
回复
To quicmous(快鼠):

你的最后一个算法十分巧妙! 如果不是联想到视平线,视平面等透视原理,要利用投影几何的基本知识来直接证明算法的正确性还真不容易!

我也同意你的看法:这已经是一个最优方案了,不再可能找到更多的改进余地.

另外,不知你有没有注意到前面Xqr()提出的'同素变换法'? 他和我们走的是两条路,采用了代数方法来实现映射. 但我想(没有具体去算过,我很懒的动笔),如果他的变换法没有问题的话, 他的结果应和你的结果一致, 也就是说,把你的方案综合起来写成表达式,很有可能和他的X,Y的算式完全一样.



To tony1978(突击召唤师):
我前面提出的那个方案已编写成了一个程序,可以演示. 为了方便,采用DOS下640*480的标准VGA图形模式,用pascal语言.由于分辨率低,再加上想在屏幕上画出两个无穷远点,幕布的面积已很小,所以我只迭代6次.
程序利用到我以前编的一些程序(改编得到),有一大堆无关的东西还在上面,相当乱. 所以源程序要整理干净才能发给你或在这里贴出.
zzwu 2002-07-29
  • 打赏
  • 举报
回复
to tony1978(突击召唤师):
作平行线在投影几何里和过两点连直线是同一概念.搬到欧氏几何中才有本质区别.
具体解决办法就是分别考虑,如和我前面讲的那样.

-----------------------------------------------------------------
to dearmite(我是笨笨!):
为什么要两个平面平行才行啊?

-----------------------------------------------------------------
to xqr():
我很想稍微再深入了解一点你的同素变换法,不知属于那一数学领域的,以前好像听到过,是代数几何吗?
又:
在我完成了我的算法的同时,也就完成了quicmous(快鼠)算法所需的几个主要子程序,这一算法实现起来实际也并不太复杂.

  • 打赏
  • 举报
回复
quicmous(快鼠)
你没看我的贴子,
你这个方法和我第一步一样,
另,如两平面夹解很小,就统一除以cos(F)
可以说,这样就是你的方法的修正解,
但如楼主要想算,只好把两二步,用几何推一下了(其实不难的,
写起来多,算起来,就那么两下(斜对直,下投影))
xqr 2002-07-29
  • 打赏
  • 举报
回复
同素变换又称共线变换。为求未知系数,须要解8阶的线性方程组,解线性方程组的算法在计算方法一书中早有现成,不管方程组有多少阶,编程代码都一样而且很简练。一旦求出8个系数,计算屏幕坐标则易如反掌。同素变换法的编码具有简洁易读易维护的优点。
quicmous(快鼠)的方法基于透视原理的图解算法,亦很好,但各种判断和特殊处理过程可能较多。
  • 打赏
  • 举报
回复
quicmous(快鼠)
你的方法真是好,
可惜要两个平面平行才行呀,
这和相似有分别么?
加载更多回复(65)

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧