社区
数据结构与算法
帖子详情
数学问题
突击召唤师
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
打赏
收藏
数学问题
问题: 计算机屏幕四个顶点(0,0) (1024,0) (0,768), (1024,768) 投影到幕布上的坐标是(a1,b1) (a2,b2) (a3,b3) (a4,b4) 均为 已知,求幕布上任意一点(x,y)在屏幕上的坐标。 提示: 屏幕是一个标准矩形,以左上角为(0,0)。投影可能是一个 倾斜的四边形,以幕布的左上角为(0,0)。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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(快鼠)算法所需的几个主要子程序,这一算法实现起来实际也并不太复杂.
项目花园范德彪
2002-07-29
打赏
举报
回复
quicmous(快鼠)
你没看我的贴子,
你这个方法和我第一步一样,
另,如两平面夹解很小,就统一除以cos(F)
可以说,这样就是你的方法的修正解,
但如楼主要想算,只好把两二步,用几何推一下了(其实不难的,
写起来多,算起来,就那么两下(斜对直,下投影))
xqr
2002-07-29
打赏
举报
回复
同素变换又称共线变换。为求未知系数,须要解8阶的线性方程组,解线性方程组的算法在计算方法一书中早有现成,不管方程组有多少阶,编程代码都一样而且很简练。一旦求出8个系数,计算屏幕坐标则易如反掌。同素变换法的编码具有简洁易读易维护的优点。
quicmous(快鼠)的方法基于透视原理的图解算法,亦很好,但各种判断和特殊处理过程可能较多。
项目花园范德彪
2002-07-29
打赏
举报
回复
quicmous(快鼠)
你的方法真是好,
可惜要两个平面平行才行呀,
这和相似有分别么?
加载更多回复(65)
ChatGPT能够处理复杂的
数学
问题
吗?
ChatGPT可以作为一个辅助工具,帮助学习者解决一些基本的
数学
问题
,提供
数学
概念的解释和理解,以及进行一些简单的计算。这可以通过收集更多的
数学
问题
和答案,或者通过生成合成的
数学
问题
来实现。虽然它具有一定的...
用MATLAB解决实际
数学
问题
,利用MATLAB解决高等
数学
问题
.doc
利用MATLAB解决高等
数学
问题
Matlab 大作业本人选择了利用MATLAB解决高等
数学
问题
。极限计算limit(f,x,a): 求函数f在x趋于常数a时的极限;limit(f): 求函数f在x趋于0时的极限;limit(f,x,a,’right’): 求函数f在x...
Python
数学
问题
17:鸡兔同笼
问题
”这是古代的
数学
问题
,表示一个笼子里有35个头,一百只脚,然后计算出有几只兔子和几只鸡。 2. 实例代码 使用循环解决鸡兔同笼
问题
# -- coding: utf-8 -- chicken = 0 while True: rabbit = 35 - chicken #...
初中
数学
抽象教学的案例_新课标下初中
数学
问题
情景教学案例和思考
摘 要:伴随着新课程标准改革的逐渐深化,情境式的教学模式在初中
数学
的教学实践中应用的也愈来愈广泛。...同时丰富的情景式
数学
教学也可以通过经典类、生活类、科学类等多种类型的
数学
问题
和教学案例的演绎,...
初学者利用c语言解决简单的
数学
问题
c语言是一款面向用户十分精确的底层语言,为了初步更好的学习它,我们可以自建一些小程序来简单的完成基础
数学
问题
,或者是方便生活的小软件 例如:鸡兔同笼;华氏度摄氏度之间的转换;坐标系内求两点的长度;计算...
数据结构与算法
33,010
社区成员
35,328
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章