user-0 提问: 求缩放比例算法

回复:
user: user-1
content: 推荐看一下windows编程的，映射模式章节，那块看懂了，计算公式就有了，这种缩放就是一个计算公式。

user: user-0
content: 感谢这么晚了还回复我的贴子  不好意思，估计是我没有表达清楚应用，还是没思路   广告牌子大小1800CM*600CM 有可能变化，但变化不会很大。  要实现这样的结果是  10米的时候完全能看得清楚广告牌上所有的字及图像，  这时假定就把广告牌缩小到屏幕最大宽度1440像素 (当前为1440*900)  还有一个限制条件 当输入5000米的时候电脑上的图像应缩小至1像素宽，  就有点像我们人眼看5公里以外的东西是一个小黑点。  求之间的换算公式，  即输入10的时候图像宽1440像素    输入5000的时候图像宽度1像素  其中输入10-5000之间的任何值，怎么求出应该是多少像素  其实可以不用管成像的其它因素，就是看算示那个比例，  纯数值计算公式，至于是不是那么大，也没有要求那么严格。  到底是不是10内能看清楚广告牌上的内容，这个不用考虑，或者是100米都可以自由设定  因为看的物体有可能很大，100米有可能都很清楚  所以，我们也可以假定100米完全能看清楚的时候，就视为在电脑上显示1440像素  也有可能10公里以看也看得到，那么这个时候输入10000的时候  就在电脑上显示1像素  意思是这个值可以自由设定但，  有两个事是限制了的，如10米或100米，对应的1440    和 5KM 或10KM 应用1像素这个是区域限制。  我想公式应该是一样的，只是多远能看清楚和模糊可以自己设置，但在屏幕上的1440和1像素是固定的。  即有可能 10对应该 1440 5000对应  1 或 100对应 1440 8000对应 1

user: user-2
content: 引用 9 楼 cnslong 的回复:模拟一下上面的字体大小多远能看得清楚,以便调整广告的字体及重点表达的元素。  输入 5000米 3000米 100米，50米 看到的缩小版  字体大小，和远近成反比例 除了需要求出10 米的可见范围之外，其他都直接按照比例关系就可以了 这样算出的是大概的，然后根据实际感觉调整以下，不会有太大误差 所谓视角，就是物体两端都能看见（看得清晰）的这个角度  把 眼睛（晶状体）看成 一个透镜  穿过透镜中心的两条直线线（光线）正好经过物体两端，这两条线的夹角， 就是视角 物体和两条直线，构成等腰三角形 正切函数，求出 10米可视物体的大小 即可  如果你说的物体，就是广告牌，那么不需要再求出物体大小了 直接就是广告牌的大小 按比例缩放就是了，近大远小  几尺以内的图像，眼睛可以直接调节到清晰为止。 再远，例如10米。就不必调节了。图像基本直接可见了 这样，10～5000米 眼睛无须做多少调节  这个比例就是 10/X 越远字越小 X =10,20,50,,,,5000米  其余的不必说了吧

user: user-0
content: 不是知道是不是这们的， 10应该的是1440 5000对应的是1  相当于5000-10=4990 表示1440像素 那么1米应该是多少像素呢？ 1440/4990=0.2885个像素点  那么当100的时候是多少像素呢？  起始点10 到100为90米  1440-90*0.2885=1351 即当输入100米的时候应该把电脑上的图像宽设置为1351像素  同  如果是2145米 公式应该是 1440-(1440/(5000-10))*(2145-10)=824(像素大约)  应该这样计算吧， 如果是50000 1440-(1440/(5000-10))*(50000-10)=0

user: user-3
content: 设x坐标表示距离（米），y坐标表示图像大小（像素），于是得到两个点分别为（10,1440）和（5000,1），根据直线方程的两点式： (x-x1)/(x2-x1)=(y-y1)/(y2-y1) 将已知的两点坐标代入上式，求出此直线的函数表达式，然后对于任何的x值，只要代入公式计算即可。  根据题目要求，在实际计算中，应该把x值限制在10到5000的范围，y值限制在1到1440的范围。

user: user-0
content: 不知道对不对，测试误差不大，   		//计算实物到缩小的缩放比 实物大小/屏幕大小 CM 根据宽 		double fScaling=m_fWidth/m_fScreenWidth; 		m_nScaling=fScaling;   		//计算出宽度缩小后的尺寸 物体原始高度CM/缩放比例 		double fScalingHeightCM=m_fHeight/fScaling;    		//计算出1CM是多少个像素点 屏蔽像素点/屏幕大小CM 目的是求出缩放后的高度 作为当图片最大时的高度 		double fPerPx=m_fScreenWidthpx/m_fScreenWidth;   		//计算出缩放后的图像的原始高度像素点 缩放后的1CM代表的像素点 图片最大时的高度 		double fShowHeightOriginal;//缩放后最大高度 		fShowHeightOriginal=fPerPx*fScalingHeightCM;   		//计算出距离与屏幕像素点的关系,走近一米屏幕上缩小多少像素 从最大（屏蔽的像素点）到最小1个像素点 		double fPerDistancePx=m_fScreenWidthpx/(m_fMaxDistance-m_fMinDistance);   		//根据距离算出应缩小多少像素 向前移动的距离*移动1米缩小的像素点 		double fScalingPositivePx=(m_fDistance-m_fMinDistance)*fPerDistancePx;   	    //根据距离移动后的宽度为 图片最大的像素-应该缩小的像素 		m_nShowWidth=m_fScreenWidthpx-fScalingPositivePx;    	    //根据移到后的宽度计算出缩小倍数                 double fCalingHeight; 		fCalingHeight=m_fScreenWidthpx/m_nShowWidth;  		//根据倍数计算出缩小后的高度 		m_nShowHeight=fShowHeightOriginal/fCalingHeight;     		if(m_nShowWidth<1)//防止误差 		{			 			m_nShowWidth=1; 			MessageBox(_T("已经消失在视线中啦！"),_T("提示信息"),MB_OK|MB_ICONASTERISK); 		} 		if(m_nShowHeight<1)//防止误差 		{ 			m_nShowHeight=1; 			MessageBox(_T("已经消失在视线中啦！"),_T("提示信息"),MB_OK|MB_ICONASTERISK); 		}

user: user-4
content: 引用 15 楼 cnslong 的回复:不是知道是不是这们的， 10应该的是1440 5000对应的是1  相当于5000-10=4990 表示1440像素 那么1米应该是多少像素呢？ 1440/4990=0.2885个像素点  那么当100的时候是多少像素呢？  起始点10 到100为90米  1440-90*0.2885=1351 即当输入100米的时候应该把电脑上的图像宽设置为1351像素  同  如果是2145米 公式应该是 1440-(1440/(5000-10))*(2145-10)=824(像素大约)  应该这样计算吧， 如果是50000 1440-(1440/(5000-10))*(50000-10)=0 引用 15 楼 cnslong 的回复:不是知道是不是这们的， 10应该的是1440 5000对应的是1  相当于5000-10=4990 表示1440像素 那么1米应该是多少像素呢？ 1440/4990=0.2885个像素点  那么当100的时候是多少像素呢？  起始点10 到100为90米  1440-90*0.2885=1351 即当输入100米的时候应该把电脑上的图像宽设置为1351像素  同  如果是2145米 公式应该是 1440-(1440/(5000-10))*(2145-10)=824(像素大约)  应该这样计算吧， 如果是50000 1440-(1440/(5000-10))*(50000-10)=0  比例是(1440-1)/(5000-10),看14楼才是正解

user: user-5
content: 你这样算是可以的，稍微修改一下就行了。 假设距离为x，10<=x<=5000，需要浮点运算，则结果为：(int)(1440 - (((x + 0.001) - 10) / 4990 * 1440)) + 1;

user: user-0
content: 完全可以这么来理解,这是个纯数字题，不用管成像问题。  10 对应该 1440   ---已知 20 对应多少 ? 50 对应多少 ? 。 。 。 。 5000对应 1   --已知  求当20,23,74,400,456......的时候怎么计算的。

user: user-0
content: 假定5公里是一个黑点，电脑上是1像素大小  走近1公里 像素点是多少？  最终走近到离广告牌10米的时候，像素大小不能超过1440像素  这个比例应该受到1-1440的限制，

user: user-0
content: 模拟一下上面的字体大小多远能看得清楚,以便调整广告的字体及重点表达的元素。  输入 5000米 3000米 100米，50米 看到的缩小版

user: user-0
content: 主要用于，模拟户外广告牌由远到近看到的效果，在电脑上显示出来。

user: user-0
content: 引用 6 楼 lm_whales 的回复:20，5000  按照10米看到的范围，求出像素量即可  哈哈，大神，要不帮我写一下感觉还是有点晕

user: user-2
content: 20，5000  按照10米看到的范围，求出像素量即可

user: user-2
content: 如果，再考虑多一点，还有人的身高大概在160cm ～200cm ; 200以上的高个，160以下的矮个不算 另外，不考虑高山河流，只考虑平地，人眼平视，向上10度，向下身高是垂直可见范围。

user: user-2
content: 人眼的视角极限大约为垂直方向150度，水平方向230度，如果在这个视角范围内都是屏幕，那么就会给我们一种身临其境的感觉。但这个角度太大，通常只有环幕电影才能达到这种效果。实际上，人视觉在10度是敏感区，10 ～20度可以正确识别信息，20～30度对动态东西比较敏感，当图像的垂直方向视角为20度，水平方向的视角为36度时，就会有非常好的视觉临场感，而且 也不因为频繁转动眼球造成疲倦  按照20度算  10米看到的范围是多少米（铅垂面的矩形或者正方形），按照20 度算求出来，或者水平36 垂直20 算， 这个 面中可视矩形（正方形），对应与屏幕的1440*900 这个比例就求出来了， 20，5000 同样求出来，就可以了

user: user-0
content: 即 10---1440  已知 20--------? 2512----? 5000----1  已知

user: user-0
content: 引用 1 楼 lm_whales 的回复:这和视角有关系 大约是 成比例的吧  就是大约这个比例值是多大，一般人能看到5公里以内的另一个人  比如10米的时候就是屏幕的宽度(1440*900),离得越远就越小，如果输入的是5000米，那么就在屏幕中显示1*1的像素点，  当然也可以设置5米为屏幕的最宽1000就显示成1*1的一个像素点这么小，  需要知道的这个比例怎么计算，  10米的时候对应的电脑像素点是多大。  500米的时候对应的电脑像素点是多大。  已知假设的条例是 10米 对应1440像素  5000米应用的是1像素

user: user-2
content: 这和视角有关系 大约是 成比例的吧