Advertisement
Guest User

Untitled

a guest
Dec 18th, 2014
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. 2.2.1
  2. I denna uppgift är målet att skapa en kon med apex i origo och som växer oändligt stor när z → ∞ med hjälp av raytracern.
  3. Till en början skapas en ny klass med funktionerna lineTest, getNormal och isInside.
  4. Funktion getNormal använder enkelt den integrerade funktionen assign för att returnera normalen.
  5. Funktionen isInside im
  6. (Ox + a*dx)2 + (Oy + a*dy)2 - (Oy + a*dy)2 = 0
  7.  (Ox2 + 2* Ox*a*dx + a2*dx2) + (Oy2 + 2* Oy*a*dy + a2*dy2 ) -(Oz2 + 2* Oz*a*dz + a2*dz2) = 0
  8.  (a2*dx2 + a2*dy2- a2*dz2) + (2* Ox*a*dx + 2*Oy*a*dy - 2* Oz*a*dz) + (Ox2 + Oy2 - Oz2) = 0
  9.  a2(dx2 + dy2- dz2) + a(2* Ox*dx + 2*Oy*dy - 2* Oz*dz) + (Ox2 + Oy2 - Oz2) = 0
  10. Jag väljer att benämna i enighet med:
  11. A = (dx2 + dy2- dz2)
  12. B = (2* Ox*dx + 2*Oy*dy - 2* Oz*dz)
  13. C = (Ox2 + Oy2 - Oz2)
  14. Vilket ger oss:
  15. a2*A + a*B – C = 0
  16. a2 + a*B/A – C/A = 0/A = 0
  17. Nu ser vi att eftersom att samtliga komponenter utom a är konstanter så kan vi lösa denna ekvation med pq-formeln:
  18. x^2 + px – q = 0=> x = -p/2±√((p/2)^2+q)
  19. där
  20. a = x
  21. p = B/A
  22. q = C/A
  23. Därefter implementeras detta i koden genom att i vår lineTest-funktion först ser
  24. -p/2-√((p/2)^2+q)>0
  25. och om detta stämmer så returnera resultat.
  26. Om det ej stämmer så kollar funktionen om
  27. -p/2+√((p/2)^2+q)>0
  28. och om detta stämmer så returnera resultatet.
  29. Om detta ej stämmer så returneras makrot MAX_DISTANCE.
  30.  
  31. Vi har efter detta fått två oändliga koner, en som växer när z → ∞ och en som växer när z → -∞
  32. För att få enbart få den konen som vi önskar så måste vi lägga till ett villkor vid varje returnering av ett värde som ej är MAX_DISTANCE.
  33. Därför läggs villkoret
  34. Oz + dz * solution >= 0
  35. där solution = -p/2-√((p/2)^2+q)>0
  36. eller solution = -p/2+√((p/2)^2+q)>0
  37. till vid respektive retur ur funktionen
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement