Search code examples
mathvectorgeometrycomputational-geometryvector-graphics

How to find 3D points coordinates in a perpendicular plane to a given vector


I have two points in a 3d space, one point is (x,0,z) and the other one is the origin (0,0,0), through those points there is a passing line with length L that is starting from the first point and continuing after the origin point, in the end of this line there is a perpendicular (to the line) flat board with dimensions of W x H, the line ends in the middle of this board.

Assume that x,z,L,H,W are given, I need a way to find all the 3D points coordinates where those points forming a pixels image over the board (meaning each point has a distance of 1 from its left, right, top, bottom neighboring points).

Attached a pretty ugly drawing :) I made trying to illustrate the problem (I marked the pixels points with two question marks but I need them all).

Thanks.

ugly_drawing


Solution

  • It is possible to define that plane. But there is no selected direction to build a grid uniquelly.

    Let we choose OY direction as base (because normal has zero Y-component).

    So we have:

    Normal vector N = (xx, 0, zz) //I renamed values to avoid confusion with coordinate variables

    Unit normal vector n = (nx, 0, nz), where

     nx = xx / Sqrt(xx*xx+zz*zz)
     nz = zz / Sqrt(xx*xx+zz*zz)
    

    Base point

    B = (bx, 0, bz) =  (xx - nx * L, 0, zz - nz * L)
    

    Unit base vector in the plane

    dy = (0, 1, 0)
    

    Another base vector

    dc = dy x n  //vector product
       = (-bz, 0, bx)
    

    Now it is possible to generate a grid, using integer indexes i, j in ranges (-W/2..W/2) and (-H/2.. H/2). Grid nodes coordinates:

      x(i, j) = bx - j * bz
      y(i, j) = 0 + i 
      z(i, j) = bz + j * bx