2013-01-16 4 views

답변

2

음의 그라데이션 벡터라고 생각합니다. 그래디언트는 "오르막"접선 벡터 여야합니다. 비행기 인 경우 주어진면을 반대로하면 "내리막"접선 벡터 여야합니다. 그래서 따라서

PLANE : z = ax + by + c where N = <a,b,c> 
grad(z) = <d/dx(ax + by + c),d/dy(ax + by + c)> = <a,b> 
-grad(z) = <-a,-b> 

경우 "힐"접선 > < -a, -b이어야한다. 하강 속도에 대한 해결

은 독자에게 맏기 : D 위치 P 그래디언트를 결정하는 문제가되지 않는 것을

참고.

편집 : 사실, 나는 내 자신을 모순이라고 생각합니다. 나는 정상적인 벡터가 "위"(스키 슬로프에서 똑바로 찌르는 깃대처럼)를 가리키는 평면 위에 내려다 보면 "내리막"접선 벡터가 실제로 N에 투영 될 것이라고 생각하고 있습니다. XY 평면이므로 t =. 그라데이션이 제대로 작동하지 않는 이유는 잘 모르겠습니다. 물론, 이것은 <이 0이면 작동 중지가됨을 나타냅니다.

2

자, 따라서 공간에서의 위치는 필요하지 않습니다. 당신이해야 할 일은 당신이 정의한 어떤 벡터로든 당신의 평면 법선 벡터의 십자가 곱을 '내려'놓는 것입니다. 이렇게하면 두 가지 모두에 수직 인 벡터가 제공됩니다 (즉, 기울기가 평평한 그라디언트 일 때). 그런 다음이 새 벡터의 교차 곱을 다시 법선으로 가져 오면 원하는 '내리막 길'벡터가 생성됩니다. 가장 큰 하향 성분이있는 기울기에 평행 한 벡터입니다.

그래서 일반 가정 및 벡터는 단위 길이를 가지고 있고 * 연산자는 여기에 외적 나타내는 아래로 : 당신의 '아래'벡터 그냥 (0, 0, -1) 경우

gradient = (normal * down) * normal;

을, 그리고 그것을위한 것 대부분의 응용 프로그램, 당신은 simplify this calculation 다음과 같은 값을 할당하여 코드에서 할 수 있습니다 요구가있을 경우 당신은 당신의 결과로 단위 길이 벡터와 끝까지하지 않으며 것이다

gradient.X = normal.X * normal.Z; 
gradient.Y = normal.Y * normal.Z; 
gradient.Z = -(normal.X * normal.X) - (normal.Y * normal.Y); 
+0

참고 스스로를 정상화 . 평면 법선이 '위로'(기울기가없는 평면을 나타냄) 인 경우 길이가 0 인 벡터를 생성하므로 정규화하기 전에이를 확인해야합니다. –