Sample of a subset of a plane

1.4k Views Asked by At

I have the equation of a plane $ax+bx+cx+d$ and a point $(x_0, y_0, z_0)$ on that plane.

I defined the neighborhood of that point on that plane as the set of points satisfying $(x-x_0)^2 + (y-y_0)^2 + (z-z_0)^2 \le \epsilon^2.$

(Am I right?)

Now I need to sample that neighbor to get some points: how can I do it?

Thanks in advance.

3

There are 3 best solutions below

0
On BEST ANSWER

Following the suggestions in the answers and in the comments I'm arrived at this procedure:

Given $p_0$ a point on a plane and $\hat{\textbf{n}} = (a,b,c)$ the normal of the plane:

  • a perpendicular vector is given by $ \textbf{j} = (-b/a,1,0)$ (supposing $a \ne 0$)
  • $ \textbf{j}' = \epsilon * \textbf{j} / ||\textbf{j}||$ is a vector of lenght $ \epsilon $ on the plane ($\epsilon \in \mathbb{R}, \epsilon \gt 0$)
  • $ \textbf{j}' + p_0 $ is a point on the neighborhood frontier, where the neighborhood is defined by: $(x−x_0)^2+(y−y_0)^2+(z−z_0)^2\le \epsilon^2$
  • to obtain an homogeneous sampling apply a rotation to the vector $ \textbf{j}'$ by the direction of the normal $\hat{\textbf{n}}$ with an angle $\theta$.
  • by scaling the rotated vector $ \textbf{j}^R$ by a variable $\gamma \in (0,1] $ and by ranging the angle of rotation from $0$ to $2\pi$ I can sample the neighborhood
  • the points are obtained by $p_0 + \textbf{j}^R$ for each rotation.

(I have an image but I can't post it: https://www.dropbox.com/s/fzvkx7865ujq0x8/sampled.png)

it is quite correct but to obtain a smoother sampling I should define a step at the arc instead that on the angle when I go on a circumference.

3
On

The easiest thing to do would be to represent the plane as an affine space, and calculate an orthonormal basis for it. Then, you could simply add to $(x_0,y_0,z_0)$ any linear combination of those two vectors with coefficients $a^2+b^2\leq \varepsilon^2$.

Hint: look for vectors which are perpendicular to the normal to the plane.

0
On

Ok, so here's how you could do it: use your $\epsilon$ to determine some sort of step size. Let, say, $x=x_{0}+\epsilon/N$ and $y=y_{0}+\epsilon/N$. Then use the equation of the plane, which is typically something like $\hat{\mathbf{n}}\cdot(\vec{r}-\vec{r}_{0})=0,$ to determine the $z$ component. Check that the resulting point satisfies the neighbor inequality. If it does not, then reduce the step size by something, say, $10$. So now you're stepping out to $x=x_{0}+\epsilon/(10N)$ and $y=y_{0}+\epsilon/(10N)$. Use the plane equation to determine $z$. Check the inequality. Repeat until the inequality holds. Because a plane is a smooth surface, this algorithm should give you points in the plane that satisfy the neighbor inequality.