社区
数据结构与算法
帖子详情
数学问题
突击召唤师
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)。
...全文
423
85
打赏
收藏
数学问题
问题: 计算机屏幕四个顶点(0,0) (1024,0) (0,768), (1024,768) 投影到幕布上的坐标是(a1,b1) (a2,b2) (a3,b3) (a4,b4) 均为 已知,求幕布上任意一点(x,y)在屏幕上的坐标。 提示: 屏幕是一个标准矩形,以左上角为(0,0)。投影可能是一个 倾斜的四边形,以幕布的左上角为(0,0)。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
数学
与
数学
思维:
数学
思维在
数学
问题
中的解决方案
1.背景介绍 1. 背景介绍
数学
是一门广泛的学科,涉及到许多领域,包括
数学
思维在内。
数学
思维是一种独特的思考方式,可以帮助我们解决各种
问题
。在本文中,我们将探讨
数学
思维在
数学
问题
解决过程中的重要性,以及如何通过
数学
思维来解决
问题
。
数学
思维是一种独特的思考方式,可以帮助我们解决各种
问题
。在本文中,我们将探讨
数学
思维在
数学
问题
解决过程中的重要性,以及如何通过
数学
思维来解决
问题
。
数学
思维的...
数学
建模:将现实
问题
转化为
数学
问题
1.背景介绍 1. 背景介绍
数学
建模是将现实世界的
问题
转化为
数学
问题
,然后通过
数学
方法求解的过程。它是一种解决
问题
的方法,可以应用于各种领域,如经济、工程、生物、物理等。
数学
建模可以帮助我们更好地理解现实
问题
,找到最佳解决方案,提高效率和效果。 在本文中,我们将讨论
数学
建模的核心概念、算法原理、实际应用场景、最佳实践以及工具和资源推荐。 2. 核心概念与联系
数学
建模的核心概念包括: ...
数学
问题
难解?新研究提出MathScale方法,让AI更懂
数学
推理
1. 概念提取:从种子
数学
问题
中提取主题和知识点MathScale方法首先从种子
数学
问题
中提取高层次的概念,即主题和知识点。这一步骤通过对GPT-3.5进行提示工程来完成,旨在提取解决特定
数学
问题
所需的元信息。主题(topics)指的是
数学
科目名称或
数学
书章节的主题名称,如“金钱与金融”或“算术运算”。知识点(knowledge points)则指
问题
解决中更细致的
数学
概念,例如“点积的定义和性质”或“将分数转换为整数”。
C++算法之巧解
数学
问题
巧解
数学
问题
利用C++求解经典
数学
问题
1.公倍数与公因数 利用辗转相除法,我们可以很方便地求得两个数的最大公因数(greatest common divisor,gcd);将两个数相乘再除以最大公因数即可得到最小公倍数(least common multiple, lcm)。 首先介绍一下辗转相除法: #include<iostream> #include<cstdio> using namesapce std; int fun(int m,int n) { int r
Python解决高等
数学
问题
Python解决高等
数学
问题
,妈妈再也不用担心我的学习 from sympy import * 输入“x= symbols(“x”)”命令定义一个符号 x = Symbol("x") y = Symbol("y") 求极限limit limit(sin(x)/x,x,0) 1\displaystyle 11 f2=(1+x)**(1/x) f2 (x+1)1x\displaystyle \left(x + 1\right)^{\frac{1}{x}}(x+1)x1 重要极限 f1=sin(x)
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章