sig*_*sen 4 math performance mathematical-optimization actionscript-3
决定一个点是否在平行四边形/菱形内部的最快速度是什么?
sig*_*sen 13
嗨再次感谢您的所有答案.与此同时,我自己想出了一些我觉得会很快的东西:
想象一下,我们有一个由PQ和PR跨越的平行四边形,其中PQ和PR是向量(P,Q和R是角).此外,我们有一点我们要检查称为A.
我们知道Vector PA可以分成两个与PQ和PR平行的向量:
PA=n*PQ+m*PR
Run Code Online (Sandbox Code Playgroud)
现在我们知道n和m必须在区间[0; 1],我们解决n和m:
n = -det(PA, PQ)/det(PQ, PR)
m = det(PA, PR)/det(PQ, PR)
Run Code Online (Sandbox Code Playgroud)
其中det(PA,PQ)是向量PA和PQ的决定因素:
det(PA, PQ) = PA.x*PQ.y-PQ.x*PA.y
Run Code Online (Sandbox Code Playgroud)
如果点A在平行四边形内,则0 <= n <= 1且0 <= m <= 1,这给出了伪代码:
var d:Number = det(PQ, PR);
if (0 <= -det(PA, PQ)/d <= 1 && 0 <= det(PA, PR)/d <= 1)
{
//inside
}
else
{
//outside
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4775 次 |
| 最近记录: |