|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
I have 3 vectors (V1,V2 and V3)
I can use them to draw a triangle:
triangle {V1,V2,V3 pigment { rgb <0,1,0> } }
Now I need to find the normal of that triangle. I suck at maths so help will be
appreciated :S
Thanks in advance
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
MadKairon schrieb:
> I have 3 vectors (V1,V2 and V3)
>
> I can use them to draw a triangle:
>
> triangle {V1,V2,V3 pigment { rgb <0,1,0> } }
>
> Now I need to find the normal of that triangle. I suck at maths so help will be
> appreciated :S
* Take two arbitrary vectors along the triangle plane - the edges are
ideally suited for this purpose ;-):
#declare A = V2-V1;
#declare B = V3-V1;
* Compute the cross product, which will give you a vector perpendicular
to the two vectors (its length will depend on the length of the vectors
and the angle between them):
#declare C = vcross(A,B);
* Normalize the result to get a unit-length vector:
#declare N = vnormalize(C);
* Voila!
Make sure that the three vertices of the triangle are in the right
order, as this will determine whether the resulting vector will point
inwards or outwards.
Also make sure your triangles are all "sane", i.e. all vertices are at
different coordinates. But you probably guessed this constraint already ;-)
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
clipka <ano### [at] anonymousorg> wrote:
>
> * Take two arbitrary vectors along the triangle plane - the edges are
> ideally suited for this purpose ;-):
>
> #declare A = V2-V1;
> #declare B = V3-V1;
>
> * Compute the cross product, which will give you a vector perpendicular
> to the two vectors (its length will depend on the length of the vectors
> and the angle between them):
>
> #declare C = vcross(A,B);
>
> * Normalize the result to get a unit-length vector:
>
> #declare N = vnormalize(C);
>
> * Voila!
>
> Make sure that the three vertices of the triangle are in the right
> order, as this will determine whether the resulting vector will point
> inwards or outwards.
>
> Also make sure your triangles are all "sane", i.e. all vertices are at
> different coordinates. But you probably guessed this constraint already ;-)
Well... my macro still generates some "insane" triangles but yeah, already
working on fixing it. THANKS A LOT FOR THE HELP!!
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
clipka <ano### [at] anonymousorg> wrote:
> * Normalize the result to get a unit-length vector:
> #declare N = vnormalize(C);
Actually if you are specifying a normal vector for a triangle in povray,
you don't necessarily have to normalize it.
--
- Warp
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"MadKairon" <nomail@nomail> wrote:
> clipka <ano### [at] anonymousorg> wrote:
> > Also make sure your triangles are all "sane", i.e. all vertices are at
> > different coordinates. But you probably guessed this constraint already ;-)
>
> Well... my macro still generates some "insane" triangles but yeah, already
> working on fixing it. THANKS A LOT FOR THE HELP!!
In your sanity checks I suggest also checking for non-co-linearity. VAngleD(A,B)
Charles
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Charles C <nomail@nomail> wrote:
> In your sanity checks I suggest also checking for non-co-linearity. VAngleD(A,B)
The cross-product itself checks for colinearity: If the points are
colinear, the result will be a zero vector.
--
- Warp
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Warp <war### [at] tagpovrayorg> wrote:
> The cross-product itself checks for colinearity: If the points are
> colinear, the result will be a zero vector.
Good point.
Charles
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Charles C" <nomail@nomail> wrote:
> Warp <war### [at] tagpovrayorg> wrote:
>
> > The cross-product itself checks for colinearity: If the points are
> > colinear, the result will be a zero vector.
>
>
> Good point.
> Charles
Thanks all, I already have a macro working which will translate a vector until
it collides with a solid and then get the normal of the surface where the
collision ocurred... now I need stuff to point to my normal :P I have a macro
for that too but no good. Check my newest thread please!!
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |