【发布时间】:2021-01-21 05:35:11
【问题描述】:
快速提问。我对 C# 比较陌生,并且有一个关于以下代码的快速问题。为什么 j 设置为等于一个值,然后几乎立即设置为另一个?
Poly.cs
using UnityEngine;
public static class Poly
{
public static bool ContainsPoint (Vector2[] polyPoints, Vector2 p)
{
var j = polyPoints.Length - 1;
var inside = false;
for (int i = 0; i < polyPoints.Length; j = i++)
{
var pi = polyPoints[i];
var pj = polyPoints[j];
if (((pi.y <= p.y && p.y < pj.y) || (pj.y <= p.y && p.y < pi.y)) && (p.x < (pj.x - pi.x) * (p.y - pi.y) / (pj.y - pi.y) + pi.x))
inside = !inside;
}
return inside;
}
}
【问题讨论】:
-
j记住每次迭代之前的i值。但是您需要手动设置第一次迭代的初始“先前”值。 -
哦,我应该补充一点,
j = i++发生在第一次迭代之后。由于它在代码中的位置,它看起来是立即执行的,但执行发生在最后。
标签: c# unity3d computational-geometry