﻿<?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++博客-王之昊在做计算几何-随笔分类-二分</title><link>http://www.cppblog.com/Wangzhihao/category/14102.html</link><description>明白自己想做什么，做自己想做的事</description><language>zh-cn</language><lastBuildDate>Fri, 09 Jul 2010 03:43:35 GMT</lastBuildDate><pubDate>Fri, 09 Jul 2010 03:43:35 GMT</pubDate><ttl>60</ttl><item><title>Deformed Wheel 滚石头</title><link>http://www.cppblog.com/Wangzhihao/archive/2010/07/01/119103.html</link><dc:creator>王之昊</dc:creator><author>王之昊</author><pubDate>Thu, 01 Jul 2010 11:54:00 GMT</pubDate><guid>http://www.cppblog.com/Wangzhihao/archive/2010/07/01/119103.html</guid><wfw:comment>http://www.cppblog.com/Wangzhihao/comments/119103.html</wfw:comment><comments>http://www.cppblog.com/Wangzhihao/archive/2010/07/01/119103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Wangzhihao/comments/commentRss/119103.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Wangzhihao/services/trackbacks/119103.html</trackback:ping><description><![CDATA[<a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1070">
<div style="text-align: center; font-size: 18pt;">Deformed Wheel</div>
</a><span style="font-weight: bold;"><br><br>题意：</span>给你一个斜面，再给一个凸多边形的石头，让石头从高出放下，沿着斜面滚动，问石头重心最后的位置。因为摩擦力很大，石头不能滑动，只能转动。（还有很多细节，具体见原题）<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先，这里要确定什么时候石头算稳定了，可以找到石头和斜面相交的两个点，一个是相对石头的最左点A，一个是相对石头的最右点B，这样如果石头要向左转动，必是绕着A转；要向右转动，必是绕着B转。这里有个问题，如果A，B的横坐标相同，那么A取最低的那个，B取最高的那个。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 找到A,B两点之后，如果重心G 有 A.x&lt;=G.x &lt;= B.x 那么他是稳定的，如果G.x &lt; A.x 那么他是向左转，如果G.x &gt; B.x那么他是向右转。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其次，要知道石头如果开始转动，不论向左向右，转动多少角度会再次碰到斜面。假设转动theta再次碰到斜面。我们要求出这个theta的值。这里可以采用二分theta的方法来解决，对于某个确定的角度theta1，直接模拟转动theta1角度。看是否超出斜面的范围，如果是，说明theta1大了，否则说明theta1小了。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二分的实现上我觉得还是有很多trick的，比如<br>
<ol>
    <li>在检查的时候，要检查石头上是否存在一点是否在斜面的下侧，这里很容易忽视那个支点，如果把支点也一并去检查，很可能因为精度的关系判他在斜面的下方，结果check函数一直都是不合法。</li>
    <li>向左转和向右转的处理上，向左转我采用的是二分［0，PI］转角，向右转我则是二分［-PI， 0］转角，结果写在一起就出问题了，向左转的判定如果在斜面下方，那么是角度大了，向右转的判定如果在斜面下方，实际上是角度小了，尽管绝对值是大了。还有一种写法是枚举［0，PI］，在check函数里再判断是向左转，还是向右转。这样不容易写错。</li>
</ol>
<br> <img src ="http://www.cppblog.com/Wangzhihao/aggbug/119103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Wangzhihao/" target="_blank">王之昊</a> 2010-07-01 19:54 <a href="http://www.cppblog.com/Wangzhihao/archive/2010/07/01/119103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Conduit Packing 包围四个圆的最小园</title><link>http://www.cppblog.com/Wangzhihao/archive/2010/06/23/118515.html</link><dc:creator>王之昊</dc:creator><author>王之昊</author><pubDate>Tue, 22 Jun 2010 16:15:00 GMT</pubDate><guid>http://www.cppblog.com/Wangzhihao/archive/2010/06/23/118515.html</guid><wfw:comment>http://www.cppblog.com/Wangzhihao/comments/118515.html</wfw:comment><comments>http://www.cppblog.com/Wangzhihao/archive/2010/06/23/118515.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Wangzhihao/comments/commentRss/118515.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Wangzhihao/services/trackbacks/118515.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 题意：有四个圆大小不一，可以随意移动他们，求包围这四个圆的最小园？&nbsp;&nbsp;<a href='http://www.cppblog.com/Wangzhihao/archive/2010/06/23/118515.html'>阅读全文</a><img src ="http://www.cppblog.com/Wangzhihao/aggbug/118515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Wangzhihao/" target="_blank">王之昊</a> 2010-06-23 00:15 <a href="http://www.cppblog.com/Wangzhihao/archive/2010/06/23/118515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>