擅长:python、mysql、java
<p><a href="https://i.stack.imgur.com/oeaPw.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/oeaPw.png" alt="enter image description here"/></a></p>
<p>为提高效率,将点与边进行比较时,请使用以下规则:</p>
<ul>
<li><p>如果您在蓝色区域,则该点在外部,</p></li>
<li><p>如果您在橙色区域,则该点在内部,</p></li>
<li><p>否则,您将需要递归测试,<strong>但是</strong>请确保选择点所在的绿色三角形,以便只在一个子边上递归。</p></li>
</ul>
<p>这看起来可能只是一个小小的差别,但却可以节省大量开支。实际上,在第<code>n</code>-代时,薄片有<code>3 x 4^n</code>面(即第十代的<code>3145728</code>);如果你递归到一个子边,你将只做<code>12</code>测试!在</p>
<p>@cdlane的版本是最差的,因为它每次都会执行一个详尽的测试。@ante的版本介于两者之间,因为它有时会提前停止,但仍然可以执行指数级的测试。在</p>
<hr/>
<p>一种简单的实现方法是假设要检查的那一面总是<code>(0,0)-(1,0)</code>。然后测试测试点属于哪个三角形是一件简单的事情,因为顶点的坐标是固定的和已知的。这可以通过四个与直线的比较来完成。在</p>
<p>当您需要递归到子边时,您将通过将其移动到原点、缩放3并旋转60°(如有必要)来变换该子边;将相同的变换应用于测试点。在</p>