﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-下雪天-文章分类-Embedded technology </title><link>http://www.cppblog.com/longjun-9/category/19557.html</link><description>简单编程</description><language>zh-cn</language><lastBuildDate>Mon, 06 Feb 2017 20:35:33 GMT</lastBuildDate><pubDate>Mon, 06 Feb 2017 20:35:33 GMT</pubDate><ttl>60</ttl><item><title>关于坐标和长度换算</title><link>http://www.cppblog.com/longjun-9/articles/181170.html</link><dc:creator>Long</dc:creator><author>Long</author><pubDate>Mon, 02 Jul 2012 11:53:00 GMT</pubDate><guid>http://www.cppblog.com/longjun-9/articles/181170.html</guid><wfw:comment>http://www.cppblog.com/longjun-9/comments/181170.html</wfw:comment><comments>http://www.cppblog.com/longjun-9/articles/181170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/longjun-9/comments/commentRss/181170.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/longjun-9/services/trackbacks/181170.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在嵌入式平台上，常常可以看到坐标和长度的换算。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如，如果手机屏幕是240x320的，则屏幕可见的X的坐标为[0，239]，可见的Y的坐标为[0，319]。为此还有计算坐标和长度转换公式，X2 - X1 = W - 1，X1、X2、W均为正，W为两点间的距离。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;初看起来还是有道理的，因为至少在求屏幕宽度的时候是有作用的（320 = 319 - 0 +1），但仔细分析之后，你会发现这种带1的运算很坑爹。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我也是在屏幕指定矩形区域内绘制最大数量的汉字时发现的，因为我发现在我的计算没有出问题的情况下，我计算出来的矩形区域宽度明显比它实际的宽度要小，以致于比预期的能够多显示一个汉字。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;尽管我花了很多时间去调试，总结起来却很简单：因为上面那种计算公式会带来误差。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最简单的例子，我从横坐标X=0开始，每次横向增加距离2像素，4次以后计算最终的X位置。根据上面的公式，加距离计算新的坐标要减1，所以4次以后，X=4；而4次连续移动，实际上横向距离增加了8，如果上面的公式依然正确的话，计算出来的X=7。这样在坐标上总共就有3像素的误差，而且移动的次数越多，误差越大；同理，用以上公式多次计算长度，长度也会有误差。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因此，个人觉得所谓&#8220;坐标和长度转换公式&#8221;其实很坑爹，如果直接运算，不考虑坐标和长度的性质差异，最多也只有单位1的误差；而用了这个公式以后，反而将误差越弄越大。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P.S.:
<div><span style="color: red; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是，之后我的理解是，W的宽度是包含了X1、X2(假设X2&gt;X1)两个端点在内的，新的W&#8217;就要对应新的端点X1&#8217;、X2&#8217;（</span><span style="color: red; ">X2&#8217; &gt;&nbsp;</span><span style="color: red; ">X1&#8217;</span><span style="color: red; ">）；如果X1&#8217;和X2相邻，那么X1&#8217; = X2 + 1或者X2&#8217; = X1 - 1。因此上面的4次宽度为2的连续移动，第一次的终点是1；但是第二次移动的时候，起点就应该是2了，依此类推&#8230;&#8230;所以4次移动结束以后X=7，和一次移动8的宽度得到的终点坐标是一样的。</span></div> <div id="haloword-lookup" class="ui-widget-content ui-draggable"><div id="haloword-title"><span id="haloword-word"></span><a herf="#" id="haloword-pron" class="haloword-button" title="发音"></a><audio id="haloword-audio"></audio><div id="haloword-control-container"><a herf="#" id="haloword-add" class="haloword-button" title="加入单词表"></a><a herf="#" id="haloword-remove" class="haloword-button" title="移出单词表"></a><a href="#" id="haloword-open" class="haloword-button" title="查看单词详细释义" target="_blank"></a><a herf="#" id="haloword-close" class="haloword-button" title="关闭查询窗"></a></div></div><div id="haloword-content"></div></div><img src ="http://www.cppblog.com/longjun-9/aggbug/181170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/longjun-9/" target="_blank">Long</a> 2012-07-02 19:53 <a href="http://www.cppblog.com/longjun-9/articles/181170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>