math.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. function Normal2Rotation(%normal)
  2. {
  3. if(getWord(%normal, 2) == 1 || getWord(%normal, 2) == -1)
  4. {
  5. %rotAxis = vectorNormalize(vectorCross(%normal, "0 1 0"));
  6. }
  7. else
  8. {
  9. %rotAxis = vectorNormalize(vectorCross(%normal, "0 0 1"));
  10. }
  11. %initialAngle = mACos(vectorDot(%normal, "0 0 1"));
  12. %rotation = %rotAxis SPC mRadtoDeg(%initialAngle);
  13. return %rotation;
  14. }
  15. function vectorClosestPointAngle(%vector, %startPoint, %point)
  16. {
  17. %vN = vectorNormalize(%vector);
  18. %v2 = vectorSub(%point, %startPoint);
  19. %dot = vectorDot(%vN, vectorNormalize(%v2));
  20. %closestPoint = vectorAdd(%startPoint, vectorScale(%vN, %dot * vectorLen(%v2)));
  21. %angle = mACos(%dot);
  22. return %closestPoint SPC %angle;
  23. }
  24. function calcAdditiveRGB(%color1, %color2)
  25. {
  26. %r1 = getWord(%color1, 0);
  27. %g1 = getWord(%color1, 1);
  28. %b1 = getWord(%color1, 2);
  29. %a1 = getWord(%color1, 3);
  30. %r2 = getWord(%color2, 0);
  31. %g2 = getWord(%color2, 1);
  32. %b2 = getWord(%color2, 2);
  33. %a2 = getWord(%color1, 3);
  34. return (%r1 + %r2) / 2 SPC (%g1 + %g2) / 2 SPC (%b1 + %b2) / 2 SPC (%a1 + %a2) / 2;
  35. }
  36. function calcAdditiveRGB_emphasis(%color1, %color2, %e)
  37. {
  38. %r1 = getWord(%color1, 0);
  39. %g1 = getWord(%color1, 1);
  40. %b1 = getWord(%color1, 2);
  41. %a1 = getWord(%color1, 3);
  42. %r2 = getWord(%color2, 0);
  43. %g2 = getWord(%color2, 1);
  44. %b2 = getWord(%color2, 2);
  45. %a2 = getWord(%color1, 3);
  46. for(%i = 0; %i < %e; %i++)
  47. {
  48. %r = %r + %r1;
  49. %g = %g + %g1;
  50. %b = %b + %b1;
  51. %a = %a + %a1;
  52. }
  53. %r = %r + %r2;
  54. %g = %g + %g2;
  55. %b = %b + %b2;
  56. %a = %a + %a2;
  57. return %r / (%e + 1) SPC %g / (%e + 1) SPC %b / (%e + 1) SPC %a / (%e + 1);
  58. }