Advertisement
snicker02

quaternion custom variation

Nov 19th, 2017
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.31 KB | None | 0 0
  1. /*
  2. JWildfire - an image and animation processor written in Java
  3. Copyright (C) 1995-2011 Andreas Maschke
  4.  
  5. This is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser
  6. General Public License as published by the Free Software Foundation; either version 2.1 of the
  7. License, or (at your option) any later version.
  8.  
  9. This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
  10. even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. Lesser General Public License for more details.
  12.  
  13. You should have received a copy of the GNU Lesser General Public License along with this software;
  14. if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  15. 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  16. */
  17. package org.jwildfire.create.tina.variation;
  18.  
  19. import static org.jwildfire.base.mathlib.MathLib.cos;
  20. import static org.jwildfire.base.mathlib.MathLib.cosh;
  21. import static org.jwildfire.base.mathlib.MathLib.sin;
  22. import static org.jwildfire.base.mathlib.MathLib.sinh;
  23. import static org.jwildfire.base.mathlib.MathLib.sqr;
  24.  
  25. import org.jwildfire.create.tina.base.XForm;
  26. import org.jwildfire.create.tina.base.XYZPoint;
  27.  
  28. public class QuaternionFunc extends VariationFunc {
  29. private static final long serialVersionUID = 1L;
  30.  
  31. private static final String PARAM_COSQPOW = "cosqpow";
  32. private static final String PARAM_COSQX1 = "cosqx1";
  33. private static final String PARAM_COSQX2 = "cosqx2";
  34. private static final String PARAM_COSQY1 = "cosqy1";
  35. private static final String PARAM_COSQY2 = "cosqy2";
  36. private static final String PARAM_COSQZ1 = "cosqz1";
  37. private static final String PARAM_COSQZ2 = "cosqz2";
  38.  
  39. private static final String PARAM_COSHQPOW = "coshqpow";
  40. private static final String PARAM_COSHQX1 = "coshqx1";
  41. private static final String PARAM_COSHQX2 = "coshqx2";
  42. private static final String PARAM_COSHQY1 = "coshqy1";
  43. private static final String PARAM_COSHQY2 = "coshqy2";
  44. private static final String PARAM_COSHQZ1 = "coshqz1";
  45. private static final String PARAM_COSHQZ2 = "coshqz2";
  46.  
  47. private static final String PARAM_COTQPOW = "cotqpow";
  48. private static final String PARAM_COTQX1 = "cotqx1";
  49. private static final String PARAM_COTQX2 = "cotqx2";
  50. private static final String PARAM_COTQY1 = "cotqy1";
  51. private static final String PARAM_COTQY2 = "cotqy2";
  52. private static final String PARAM_COTQZ1 = "cotqz1";
  53. private static final String PARAM_COTQZ2 = "cotqz2";
  54.  
  55. private static final String PARAM_COTHQPOW = "cothqpow";
  56. private static final String PARAM_COTHQX1 = "cothqx1";
  57. private static final String PARAM_COTHQX2 = "cothqx2";
  58. private static final String PARAM_COTHQY1 = "cothqy1";
  59. private static final String PARAM_COTHQY2 = "cothqy2";
  60. private static final String PARAM_COTHQZ1 = "cothqz1";
  61. private static final String PARAM_COTHQZ2 = "cothqz2";
  62.  
  63. private static final String PARAM_CSCQPOW = "cscqpow";
  64. private static final String PARAM_CSCQX1 = "cscqx1";
  65. private static final String PARAM_CSCQX2 = "cscqx2";
  66. private static final String PARAM_CSCQY1 = "cscqy1";
  67. private static final String PARAM_CSCQY2 = "cscqy2";
  68. private static final String PARAM_CSCQZ1 = "cscqz1";
  69. private static final String PARAM_CSCQZ2 = "cscqz2";
  70.  
  71. private static final String PARAM_CSCHQPOW = "cschqpow";
  72. private static final String PARAM_CSCHQX1 = "cschqx1";
  73. private static final String PARAM_CSCHQX2 = "cschqx2";
  74. private static final String PARAM_CSCHQY1 = "cschqy1";
  75. private static final String PARAM_CSCHQY2 = "cschqy2";
  76. private static final String PARAM_CSCHQZ1 = "cschqz1";
  77. private static final String PARAM_CSCHQZ2 = "cschqz2";
  78.  
  79. private static final String PARAM_SECQPOW = "secqpow";
  80. private static final String PARAM_SECQX1 = "secqx1";
  81. private static final String PARAM_SECQX2 = "secqx2";
  82. private static final String PARAM_SECQY1 = "secqy1";
  83. private static final String PARAM_SECQY2 = "secqy2";
  84. private static final String PARAM_SECQZ1 = "secqz1";
  85. private static final String PARAM_SECQZ2 = "secqz2";
  86.  
  87. private static final String PARAM_SECHQPOW = "sechqpow";
  88. private static final String PARAM_SECHQX1 = "sechqx1";
  89. private static final String PARAM_SECHQX2 = "sechqx2";
  90. private static final String PARAM_SECHQY1 = "sechqy1";
  91. private static final String PARAM_SECHQY2 = "sechqy2";
  92. private static final String PARAM_SECHQZ1 = "sechqz1";
  93. private static final String PARAM_SECHQZ2 = "sechqz2";
  94.  
  95. private static final String PARAM_SINQPOW = "sinqpow";
  96. private static final String PARAM_SINQX1 = "sinqx1";
  97. private static final String PARAM_SINQX2 = "sinqx2";
  98. private static final String PARAM_SINQY1 = "sinqy1";
  99. private static final String PARAM_SINQY2 = "sinqy2";
  100. private static final String PARAM_SINQZ1 = "sinqz1";
  101. private static final String PARAM_SINQZ2 = "sinqz2";
  102.  
  103. private static final String PARAM_SINHQPOW = "sinhqpow";
  104. private static final String PARAM_SINHQX1 = "sinhqx1";
  105. private static final String PARAM_SINHQX2 = "sinhqx2";
  106. private static final String PARAM_SINHQY1 = "sinhqy1";
  107. private static final String PARAM_SINHQY2 = "sinhqy2";
  108. private static final String PARAM_SINHQZ1 = "sinhqz1";
  109. private static final String PARAM_SINHQZ2 = "sinhqz2";
  110.  
  111. private static final String PARAM_TANQPOW = "tanqpow";
  112. private static final String PARAM_TANQX1 = "tanqx1";
  113. private static final String PARAM_TANQX2 = "tanqx2";
  114. private static final String PARAM_TANQY1 = "tanqy1";
  115. private static final String PARAM_TANQY2 = "tanqy2";
  116. private static final String PARAM_TANQZ1 = "tanqz1";
  117. private static final String PARAM_TANQZ2 = "tanqz2";
  118.  
  119. private static final String PARAM_TANHQPOW = "tanhqpow";
  120. private static final String PARAM_TANHQX1 = "tanhqx1";
  121. private static final String PARAM_TANHQX2 = "tanhqx2";
  122. private static final String PARAM_TANHQY1 = "tanhqy1";
  123. private static final String PARAM_TANHQY2 = "tanhqy2";
  124. private static final String PARAM_TANHQZ1 = "tanhqz1";
  125. private static final String PARAM_TANHQZ2 = "tanhqz2";
  126.  
  127. private static final String[] paramNames = { PARAM_COSQPOW, PARAM_COSQX1,
  128. PARAM_COSQX2, PARAM_COSQY1, PARAM_COSQY2, PARAM_COSQZ1,
  129. PARAM_COSQZ2, PARAM_COSHQPOW, PARAM_COSHQX1, PARAM_COSHQX2,
  130. PARAM_COSHQY1, PARAM_COSHQY2, PARAM_COSHQZ1, PARAM_COSHQZ2,
  131. PARAM_COTQPOW, PARAM_COTQX1, PARAM_COTQX2, PARAM_COTQY1,
  132. PARAM_COTQY2, PARAM_COTQZ1, PARAM_COTQZ2, PARAM_COTHQPOW,
  133. PARAM_COTHQX1, PARAM_COTHQX2, PARAM_COTHQY1, PARAM_COTHQY2,
  134. PARAM_COTHQZ1, PARAM_COTHQZ2, PARAM_CSCQPOW, PARAM_CSCQX1,
  135. PARAM_CSCQX2, PARAM_CSCQY1, PARAM_CSCQY2, PARAM_CSCQZ1,
  136. PARAM_CSCQZ2, PARAM_CSCHQPOW, PARAM_CSCHQX1, PARAM_CSCHQX2,
  137. PARAM_CSCHQY1, PARAM_CSCHQY2, PARAM_CSCHQZ1, PARAM_CSCHQZ2,
  138. PARAM_SECQPOW, PARAM_SECQX1, PARAM_SECQX2, PARAM_SECQY1,
  139. PARAM_SECQY2, PARAM_SECQZ1, PARAM_SECQZ2, PARAM_SECHQPOW,
  140. PARAM_SECHQX1, PARAM_SECHQX2, PARAM_SECHQY1, PARAM_SECHQY2,
  141. PARAM_SECHQZ1, PARAM_SECHQZ2, PARAM_SINQPOW, PARAM_SINQX1,
  142. PARAM_SINQX2, PARAM_SINQY1, PARAM_SINQY2, PARAM_SINQZ1,
  143. PARAM_SINQZ2, PARAM_SINHQPOW, PARAM_SINHQX1, PARAM_SINHQX2,
  144. PARAM_SINHQY1, PARAM_SINHQY2, PARAM_SINHQZ1, PARAM_SINHQZ2,
  145. PARAM_TANQPOW, PARAM_TANQX1, PARAM_TANQX2, PARAM_TANQY1,
  146. PARAM_TANQY2, PARAM_TANQZ1, PARAM_TANQZ2, PARAM_TANHQPOW,
  147. PARAM_TANHQX1, PARAM_TANHQX2, PARAM_TANHQY1, PARAM_TANHQY2,
  148. PARAM_TANHQZ1, PARAM_TANHQZ2 };
  149. private double cosqpow = 1.0;
  150. private double cosqx1 = 1.0;
  151. private double cosqx2 = 1.0;
  152. private double cosqy1 = 1.0;
  153. private double cosqy2 = 1.0;
  154. private double cosqz1 = 1.0;
  155. private double cosqz2 = 1.0;
  156.  
  157. private double coshqpow = 0.0;
  158. private double coshqx1 = 1.0;
  159. private double coshqx2 = 1.0;
  160. private double coshqy1 = 1.0;
  161. private double coshqy2 = 1.0;
  162. private double coshqz1 = 1.0;
  163. private double coshqz2 = 1.0;
  164.  
  165. private double cotqpow = 0.0;
  166. private double cotqx1 = 1.0;
  167. private double cotqx2 = 1.0;
  168. private double cotqy1 = 1.0;
  169. private double cotqy2 = 1.0;
  170. private double cotqz1 = 1.0;
  171. private double cotqz2 = 1.0;
  172.  
  173. private double cothqpow = 0.0;
  174. private double cothqx1 = 1.0;
  175. private double cothqx2 = 1.0;
  176. private double cothqy1 = 1.0;
  177. private double cothqy2 = 1.0;
  178. private double cothqz1 = 1.0;
  179. private double cothqz2 = 1.0;
  180.  
  181. private double cscqpow = 0.0;
  182. private double cscqx1 = 1.0;
  183. private double cscqx2 = 1.0;
  184. private double cscqy1 = 1.0;
  185. private double cscqy2 = 1.0;
  186. private double cscqz1 = 1.0;
  187. private double cscqz2 = 1.0;
  188.  
  189. private double cschqpow = 0.0;
  190. private double cschqx1 = 1.0;
  191. private double cschqx2 = 1.0;
  192. private double cschqy1 = 1.0;
  193. private double cschqy2 = 1.0;
  194. private double cschqz1 = 1.0;
  195. private double cschqz2 = 1.0;
  196.  
  197. private double secqpow = 0.0;
  198. private double secqx1 = 1.0;
  199. private double secqx2 = 1.0;
  200. private double secqy1 = 1.0;
  201. private double secqy2 = 1.0;
  202. private double secqz1 = 1.0;
  203. private double secqz2 = 1.0;
  204.  
  205. private double sechqpow = 0.0;
  206. private double sechqx1 = 1.0;
  207. private double sechqx2 = 1.0;
  208. private double sechqy1 = 1.0;
  209. private double sechqy2 = 1.0;
  210. private double sechqz1 = 1.0;
  211. private double sechqz2 = 1.0;
  212.  
  213. private double sinqpow = 0.0;
  214. private double sinqx1 = 1.0;
  215. private double sinqx2 = 1.0;
  216. private double sinqy1 = 1.0;
  217. private double sinqy2 = 1.0;
  218. private double sinqz1 = 1.0;
  219. private double sinqz2 = 1.0;
  220.  
  221. private double sinhqpow = 0.0;
  222. private double sinhqx1 = 1.0;
  223. private double sinhqx2 = 1.0;
  224. private double sinhqy1 = 1.0;
  225. private double sinhqy2 = 1.0;
  226. private double sinhqz1 = 1.0;
  227. private double sinhqz2 = 1.0;
  228.  
  229. private double tanqpow = 0.0;
  230. private double tanqx1 = 1.0;
  231. private double tanqx2 = 1.0;
  232. private double tanqy1 = 1.0;
  233. private double tanqy2 = 1.0;
  234. private double tanqz1 = 1.0;
  235. private double tanqz2 = 1.0;
  236.  
  237. private double tanhqpow = 0.0;
  238. private double tanhqx1 = 1.0;
  239. private double tanhqx2 = 1.0;
  240. private double tanhqy1 = 1.0;
  241. private double tanhqy2 = 1.0;
  242. private double tanhqz1 = 1.0;
  243. private double tanhqz2 = 1.0;
  244.  
  245. @Override
  246. public void transform(FlameTransformationContext pContext, XForm pXForm,
  247. XYZPoint pAffineTP, XYZPoint pVarTP, double pAmount) {
  248. /* Quaternion vars by zephyrtronium http://zephyrtronium.deviantart.com/art/Quaternion-Apo-Plugin-Pack-165451482 */
  249. /* Variables and combination by Brad Stefanov */
  250.  
  251. double x = 0.0, y = 0.0, z = 0.0;
  252.  
  253. if (cosqpow != 0) {
  254. double cosqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * cosqz1;
  255. double cosqs = sin(pAffineTP.x * cosqx1);
  256. double cosqc = cos(pAffineTP.x * cosqx2);
  257. double cosqsh = sinh(cosqabs_v * cosqy1);
  258. double cosqch = cosh(cosqabs_v * cosqy2);
  259. double cosqC = pAmount * cosqs * cosqsh / cosqabs_v * cosqz2;
  260. x += cosqpow * pAmount * cosqc * cosqch;
  261. y += cosqpow * cosqC * pAffineTP.y;
  262. z += cosqpow * cosqC * pAffineTP.z;
  263. }
  264.  
  265. if (coshqpow != 0) {
  266. double coshqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * coshqz1;
  267. double coshqs = sin(coshqabs_v * coshqy1);
  268. double coshqc = cos(coshqabs_v * coshqy2);
  269. double coshqsh = sinh(pAffineTP.x * coshqx1);
  270. double coshqch = cosh(pAffineTP.x * coshqx2);
  271. double coshqC = pAmount * coshqsh * coshqs / coshqabs_v * coshqz2;
  272. x += coshqpow * pAmount * coshqch * coshqc;
  273. y += coshqpow * coshqC * pAffineTP.y;
  274. z += coshqpow * coshqC * pAffineTP.z;
  275. }
  276. if (cotqpow != 0) {
  277. double cotqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * cotqz1;
  278. double cotqs = sin(pAffineTP.x * cotqx1);
  279. double cotqc = cos(pAffineTP.x * cotqx2);
  280. double cotqsh = sinh(cotqabs_v * cotqy1);
  281. double cotqch = cosh(cotqabs_v * cotqy2);
  282. double cotqsysz = sqr(pAffineTP.y) + sqr(pAffineTP.z);
  283. double cotqni = pAmount / (sqr(pAffineTP.x) + cotqsysz);
  284. double cotqC = cotqc * cotqsh / cotqabs_v * cotqz2;
  285. double cotqB = -cotqs * cotqsh / cotqabs_v;
  286. double cotqstcv = cotqs * cotqch;
  287. double cotqnstcv = -cotqstcv;
  288. double cotqctcv = cotqc * cotqch;
  289. x += cotqpow * (cotqstcv * cotqctcv + cotqC * cotqB * cotqsysz)
  290. * cotqni;
  291. y -= cotqpow
  292. * (cotqnstcv * cotqB * pAffineTP.y + cotqC * pAffineTP.y
  293. * cotqctcv) * cotqni;
  294. z -= cotqpow
  295. * (cotqnstcv * cotqB * pAffineTP.z + cotqC * pAffineTP.z
  296. * cotqctcv) * cotqni;
  297.  
  298. }
  299. if (cothqpow != 0) {
  300. double cothqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * cothqz1;
  301. double cothqs = sin(cothqabs_v * cothqy1);
  302. double cothqc = cos(cothqabs_v * cothqy2);
  303. double cothqsh = sinh(pAffineTP.x * cothqx1);
  304. double cothqch = cosh(pAffineTP.x * cothqx2);
  305. double cothqsysz = sqr(pAffineTP.y) + sqr(pAffineTP.z);
  306. double cothqni = pAmount / (sqr(pAffineTP.x) + cothqsysz);
  307. double cothqC = cothqch * cothqs / cothqabs_v * cothqz2;
  308. double cothqB = cothqsh * cothqs / cothqabs_v;
  309. double cothqstcv = cothqsh * cothqc;
  310. double cothqnstcv = -cothqstcv;
  311. double cothqctcv = cothqch * cothqc;
  312. x += cothqpow
  313. * (cothqstcv * cothqctcv + cothqC * cothqB * cothqsysz)
  314. * cothqni;
  315. y += cothqpow
  316. * (cothqnstcv * cothqB * pAffineTP.y + cothqC * pAffineTP.y
  317. * cothqctcv) * cothqni;
  318. z += cothqpow
  319. * (cothqnstcv * cothqB * pAffineTP.z + cothqC * pAffineTP.z
  320. * cothqctcv) * cothqni;
  321. }
  322. if (cscqpow != 0) {
  323. double cscqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * cscqz1;
  324. double cscqs = sin(pAffineTP.x * cscqx1);
  325. double cscqc = cos(pAffineTP.x * cscqx2);
  326. double cscqsh = sinh(cscqabs_v * cscqy1);
  327. double cscqch = cosh(cscqabs_v * cscqy2);
  328. double cscqni = pAmount
  329. / (sqr(pAffineTP.x) + sqr(pAffineTP.y) + sqr(pAffineTP.z));
  330. double cscqC = cscqni * cscqc * cscqsh / cscqabs_v * cscqz2;
  331. x += cscqpow * cscqs * cscqch * cscqni;
  332. y -= cscqpow * cscqC * pAffineTP.y;
  333. z -= cscqpow * cscqC * pAffineTP.z;
  334. }
  335.  
  336. if (cschqpow != 0) {
  337. double cschqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * cschqz1;
  338. double cschqs = sin(cschqabs_v * cschqy1);
  339. double cschqc = cos(cschqabs_v * cschqy2);
  340. double cschqsh = sinh(pAffineTP.x * cschqx1);
  341. double cschqch = cosh(pAffineTP.x * cschqx2);
  342. double cschqni = pAmount
  343. / (sqr(pAffineTP.x) + sqr(pAffineTP.y) + sqr(pAffineTP.z));
  344. double cschqC = cschqni * cschqch * cschqs / cschqabs_v * cschqz2;
  345. x += cschqpow * cschqsh * cschqc * cschqni;
  346. y -= cschqpow * cschqC * pAffineTP.y;
  347. z -= cschqpow * cschqC * pAffineTP.z;
  348. }
  349.  
  350. if (secqpow != 0) {
  351. double secqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * secqz1;
  352. double secqs = sin(-pAffineTP.x * secqx1);
  353. double secqc = cos(-pAffineTP.x * secqx2);
  354. double secqsh = sinh(secqabs_v * secqy1);
  355. double secqch = cosh(secqabs_v * secqy2);
  356. double secqni = pAmount
  357. / (sqr(pAffineTP.x) + sqr(pAffineTP.y) + sqr(pAffineTP.z));
  358. double secqC = secqni * secqs * secqsh / secqabs_v * secqx2;
  359. x += secqpow * secqc * secqch * secqni;
  360. y -= secqpow * secqC * pAffineTP.y;
  361. z -= secqpow * secqC * pAffineTP.z;
  362. }
  363.  
  364. if (sechqpow != 0) {
  365. double sechqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * sechqz1;
  366. double sechqs = sin(sechqabs_v * sechqy1);
  367. double sechqc = cos(sechqabs_v * sechqy2);
  368. double sechqsh = sinh(pAffineTP.x * sechqx1);
  369. double sechqch = cosh(pAffineTP.x * sechqx2);
  370. double sechqni = pAmount
  371. / (sqr(pAffineTP.x) + sqr(pAffineTP.y) + sqr(pAffineTP.z));
  372. double sechqC = sechqni * sechqsh * sechqs / sechqabs_v * sechqz2;
  373. x += sechqpow * sechqch * sechqc * sechqni;
  374. y -= sechqpow * sechqC * pAffineTP.y;
  375. z -= sechqpow * sechqC * pAffineTP.z;
  376. }
  377.  
  378. if (tanqpow != 0) {
  379. double tanqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * tanqz1;
  380. double tanqs = sin(pAffineTP.x * tanqx1);
  381. double tanqc = cos(pAffineTP.x * tanqx2);
  382. double tanqsh = sinh(tanqabs_v * tanqy1);
  383. double tanqch = cosh(tanqabs_v * tanqy2);
  384. double tanqsysz = sqr(pAffineTP.y) + sqr(pAffineTP.z);
  385. double tanqni = pAmount / (sqr(pAffineTP.x) + tanqsysz);
  386. double tanqC = tanqc * tanqsh / tanqabs_v * tanqz2;
  387. double tanqB = -tanqs * tanqsh / tanqabs_v;
  388. double tanqstcv = tanqs * tanqch;
  389. double tanqnstcv = -tanqstcv;
  390. double tanqctcv = tanqc * tanqch;
  391. x += tanqpow * (tanqstcv * tanqctcv + tanqC * tanqB * tanqsysz)
  392. * tanqni;
  393. y += tanqpow
  394. * (tanqnstcv * tanqB * pAffineTP.y + tanqC * pAffineTP.y
  395. * tanqctcv) * tanqni;
  396. z += tanqpow
  397. * (tanqnstcv * tanqB * pAffineTP.z + tanqC * pAffineTP.z
  398. * tanqctcv) * tanqni;
  399. }
  400. if (tanhqpow != 0) {
  401. double tanhqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * tanhqz1;
  402. double tanhqs = sin(tanhqabs_v * tanhqy1);
  403. double tanhqc = cos(tanhqabs_v * tanhqy2);
  404. double tanhqsh = sinh(pAffineTP.x * tanhqx1);
  405. double tanhqch = cosh(pAffineTP.x * tanhqx2);
  406. double tanhqsysz = sqr(pAffineTP.y) + sqr(pAffineTP.z);
  407. double tanhqni = pAmount / (sqr(pAffineTP.x) + tanhqsysz);
  408. double tanhqC = tanhqch * tanhqs / tanhqabs_v * tanhqz2;
  409. double tanhqB = tanhqsh * tanhqs / tanhqabs_v;
  410. double tanhqstcv = tanhqsh * tanhqc;
  411. double tanhqnstcv = -tanhqstcv;
  412. double tanhqctcv = tanhqc * tanhqch;
  413. x += tanhqpow
  414. * (tanhqstcv * tanhqctcv + tanhqC * tanhqB * tanhqsysz)
  415. * tanhqni;
  416. y += tanhqpow
  417. * (tanhqnstcv * tanhqB * pAffineTP.y + tanhqC * pAffineTP.y
  418. * tanhqctcv) * tanhqni;
  419. z += tanhqpow
  420. * (tanhqnstcv * tanhqB * pAffineTP.z + tanhqC * pAffineTP.z
  421. * tanhqctcv) * tanhqni;
  422. }
  423. if (sinqpow != 0) {
  424. double sinqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * sinqz1;
  425. double sinqs = sin(pAffineTP.x * sinqx1);
  426. double sinqc = cos(pAffineTP.x * sinqx2);
  427. double sinqsh = sinh(sinqabs_v * sinqy1);
  428. double sinqch = cosh(sinqabs_v * sinqy2);
  429. double sinqC = pAmount * sinqc * sinqsh / sinqabs_v * sinqz2;
  430. x += sinqpow * pAmount * sinqs * sinqch;
  431. y += sinqpow * sinqC * pAffineTP.y;
  432. z += sinqpow * sinqC * pAffineTP.z;
  433. }
  434. if (sinhqpow != 0) {
  435. double sinhqabs_v = Math.hypot(pAffineTP.y, pAffineTP.z) * sinhqz1;
  436. double sinhqs = sin(sinhqabs_v * sinhqy1);
  437. double sinhqc = cos(sinhqabs_v * sinhqy2);
  438. double sinhqsh = sinh(pAffineTP.x * sinhqx1);
  439. double sinhqch = cosh(pAffineTP.x * sinhqx2);
  440. double sinhqC = pAmount * sinhqch * sinhqs / sinhqabs_v * sinhqz2;
  441. x += sinhqpow * pAmount * sinhqsh * sinhqc;
  442. y += sinhqpow * sinhqC * pAffineTP.y;
  443. z += sinhqpow * sinhqC * pAffineTP.z;
  444. }
  445. pVarTP.x += x;
  446. pVarTP.y += y;
  447. pVarTP.z += z;
  448.  
  449. }
  450.  
  451. @Override
  452. public String[] getParameterNames() {
  453. return paramNames;
  454. }
  455.  
  456. @Override
  457. public Object[] getParameterValues() {
  458. return new Object[] { cosqpow, cosqx1, cosqx2, cosqy1, cosqy2, cosqz1,
  459. cosqz2, coshqpow, coshqx1, coshqx2, coshqy1, coshqy2, coshqz1,
  460. coshqz2, cotqpow, cotqx1, cotqx2, cotqy1, cotqy2, cotqz1,
  461. cotqz2, cothqpow, cothqx1, cothqx2, cothqy1, cothqy2, cothqz1,
  462. cothqz2, cscqpow, cscqx1, cscqx2, cscqy1, cscqy2, cscqz1,
  463. cscqz2, cschqpow, cschqx1, cschqx2, cschqy1, cschqy2, cschqz1,
  464. cschqz2, secqpow, secqx1, secqx2, secqy1, secqy2, secqz1,
  465. secqz2, sechqpow, sechqx1, sechqx2, sechqy1, sechqy2, sechqz1,
  466. sechqz2, sinqpow, sinqx1, sinqx2, sinqy1, sinqy2, sinqz1,
  467. sinqz2, sinhqpow, sinhqx1, sinhqx2, sinhqy1, sinhqy2, sinhqz1,
  468. sinhqz2, tanqpow, tanqx1, tanqx2, tanqy1, tanqy2, tanqz1,
  469. tanqz2, tanhqpow, tanhqx1, tanhqx2, tanhqy1, tanhqy2, tanhqz1,
  470. tanhqz2 };
  471. }
  472.  
  473. @Override
  474. public void setParameter(String pName, double pValue) {
  475. if (PARAM_COSQPOW.equalsIgnoreCase(pName))
  476. cosqpow = pValue;
  477. else if (PARAM_COSQX1.equalsIgnoreCase(pName))
  478. cosqx1 = pValue;
  479. else if (PARAM_COSQX2.equalsIgnoreCase(pName))
  480. cosqx2 = pValue;
  481. else if (PARAM_COSQY1.equalsIgnoreCase(pName))
  482. cosqy1 = pValue;
  483. else if (PARAM_COSQY2.equalsIgnoreCase(pName))
  484. cosqy2 = pValue;
  485. else if (PARAM_COSQZ1.equalsIgnoreCase(pName))
  486. cosqz1 = pValue;
  487. else if (PARAM_COSQZ2.equalsIgnoreCase(pName))
  488. cosqz2 = pValue;
  489. else if (PARAM_COSHQPOW.equalsIgnoreCase(pName))
  490. coshqpow = pValue;
  491. else if (PARAM_COSHQX1.equalsIgnoreCase(pName))
  492. coshqx1 = pValue;
  493. else if (PARAM_COSHQX2.equalsIgnoreCase(pName))
  494. coshqx2 = pValue;
  495. else if (PARAM_COSHQY1.equalsIgnoreCase(pName))
  496. coshqy1 = pValue;
  497. else if (PARAM_COSHQY2.equalsIgnoreCase(pName))
  498. coshqy2 = pValue;
  499. else if (PARAM_COSHQZ1.equalsIgnoreCase(pName))
  500. coshqz1 = pValue;
  501. else if (PARAM_COSHQZ2.equalsIgnoreCase(pName))
  502. coshqz2 = pValue;
  503. else if (PARAM_COTQPOW.equalsIgnoreCase(pName))
  504. cotqpow = pValue;
  505. else if (PARAM_COTQX1.equalsIgnoreCase(pName))
  506. cotqx1 = pValue;
  507. else if (PARAM_COTQX2.equalsIgnoreCase(pName))
  508. cotqx2 = pValue;
  509. else if (PARAM_COTQY1.equalsIgnoreCase(pName))
  510. cotqy1 = pValue;
  511. else if (PARAM_COTQY2.equalsIgnoreCase(pName))
  512. cotqy2 = pValue;
  513. else if (PARAM_COTQZ1.equalsIgnoreCase(pName))
  514. cotqz1 = pValue;
  515. else if (PARAM_COTQZ2.equalsIgnoreCase(pName))
  516. cotqz2 = pValue;
  517. else if (PARAM_COTHQPOW.equalsIgnoreCase(pName))
  518. cothqpow = pValue;
  519. else if (PARAM_COTHQX1.equalsIgnoreCase(pName))
  520. cothqx1 = pValue;
  521. else if (PARAM_COTHQX2.equalsIgnoreCase(pName))
  522. cothqx2 = pValue;
  523. else if (PARAM_COTHQY1.equalsIgnoreCase(pName))
  524. cothqy1 = pValue;
  525. else if (PARAM_COTHQY2.equalsIgnoreCase(pName))
  526. cothqy2 = pValue;
  527. else if (PARAM_COTHQZ1.equalsIgnoreCase(pName))
  528. cothqz1 = pValue;
  529. else if (PARAM_COTHQZ2.equalsIgnoreCase(pName))
  530. cothqz2 = pValue;
  531. else if (PARAM_CSCQPOW.equalsIgnoreCase(pName))
  532. cscqpow = pValue;
  533. else if (PARAM_CSCQX1.equalsIgnoreCase(pName))
  534. cscqx1 = pValue;
  535. else if (PARAM_CSCQX2.equalsIgnoreCase(pName))
  536. cscqx2 = pValue;
  537. else if (PARAM_CSCQY1.equalsIgnoreCase(pName))
  538. cscqy1 = pValue;
  539. else if (PARAM_CSCQY2.equalsIgnoreCase(pName))
  540. cscqy2 = pValue;
  541. else if (PARAM_CSCQZ1.equalsIgnoreCase(pName))
  542. cscqz1 = pValue;
  543. else if (PARAM_CSCQZ2.equalsIgnoreCase(pName))
  544. cscqz2 = pValue;
  545. else if (PARAM_CSCHQPOW.equalsIgnoreCase(pName))
  546. cschqpow = pValue;
  547. else if (PARAM_CSCHQX1.equalsIgnoreCase(pName))
  548. cschqx1 = pValue;
  549. else if (PARAM_CSCHQX2.equalsIgnoreCase(pName))
  550. cschqx2 = pValue;
  551. else if (PARAM_CSCHQY1.equalsIgnoreCase(pName))
  552. cschqy1 = pValue;
  553. else if (PARAM_CSCHQY2.equalsIgnoreCase(pName))
  554. cschqy2 = pValue;
  555. else if (PARAM_CSCHQZ1.equalsIgnoreCase(pName))
  556. cschqz1 = pValue;
  557. else if (PARAM_CSCHQZ2.equalsIgnoreCase(pName))
  558. cschqz2 = pValue;
  559. else if (PARAM_SECQPOW.equalsIgnoreCase(pName))
  560. secqpow = pValue;
  561. else if (PARAM_SECQX1.equalsIgnoreCase(pName))
  562. secqx1 = pValue;
  563. else if (PARAM_SECQX2.equalsIgnoreCase(pName))
  564. secqx2 = pValue;
  565. else if (PARAM_SECQY1.equalsIgnoreCase(pName))
  566. secqy1 = pValue;
  567. else if (PARAM_SECQY2.equalsIgnoreCase(pName))
  568. secqy2 = pValue;
  569. else if (PARAM_SECQZ1.equalsIgnoreCase(pName))
  570. secqz1 = pValue;
  571. else if (PARAM_SECQZ2.equalsIgnoreCase(pName))
  572. secqz2 = pValue;
  573. else if (PARAM_SECHQPOW.equalsIgnoreCase(pName))
  574. sechqpow = pValue;
  575. else if (PARAM_SECHQX1.equalsIgnoreCase(pName))
  576. sechqx1 = pValue;
  577. else if (PARAM_SECHQX2.equalsIgnoreCase(pName))
  578. sechqx2 = pValue;
  579. else if (PARAM_SECHQY1.equalsIgnoreCase(pName))
  580. sechqy1 = pValue;
  581. else if (PARAM_SECHQY2.equalsIgnoreCase(pName))
  582. sechqy2 = pValue;
  583. else if (PARAM_SECHQZ1.equalsIgnoreCase(pName))
  584. sechqz1 = pValue;
  585. else if (PARAM_SECHQZ2.equalsIgnoreCase(pName))
  586. sechqz2 = pValue;
  587. else if (PARAM_SINQPOW.equalsIgnoreCase(pName))
  588. sinqpow = pValue;
  589. else if (PARAM_SINQX1.equalsIgnoreCase(pName))
  590. sinqx1 = pValue;
  591. else if (PARAM_SINQX2.equalsIgnoreCase(pName))
  592. sinqx2 = pValue;
  593. else if (PARAM_SINQY1.equalsIgnoreCase(pName))
  594. sinqy1 = pValue;
  595. else if (PARAM_SINQY2.equalsIgnoreCase(pName))
  596. sinqy2 = pValue;
  597. else if (PARAM_SINQZ1.equalsIgnoreCase(pName))
  598. sinqz1 = pValue;
  599. else if (PARAM_SINQZ2.equalsIgnoreCase(pName))
  600. sinqz2 = pValue;
  601. else if (PARAM_SINHQPOW.equalsIgnoreCase(pName))
  602. sinhqpow = pValue;
  603. else if (PARAM_SINHQX1.equalsIgnoreCase(pName))
  604. sinhqx1 = pValue;
  605. else if (PARAM_SINHQX2.equalsIgnoreCase(pName))
  606. sinhqx2 = pValue;
  607. else if (PARAM_SINHQY1.equalsIgnoreCase(pName))
  608. sinhqy1 = pValue;
  609. else if (PARAM_SINHQY2.equalsIgnoreCase(pName))
  610. sinhqy2 = pValue;
  611. else if (PARAM_SINHQZ1.equalsIgnoreCase(pName))
  612. sinhqz1 = pValue;
  613. else if (PARAM_SINHQZ2.equalsIgnoreCase(pName))
  614. sinhqz2 = pValue;
  615. else if (PARAM_TANQPOW.equalsIgnoreCase(pName))
  616. tanqpow = pValue;
  617. else if (PARAM_TANQX1.equalsIgnoreCase(pName))
  618. tanqx1 = pValue;
  619. else if (PARAM_TANQX2.equalsIgnoreCase(pName))
  620. tanqx2 = pValue;
  621. else if (PARAM_TANQY1.equalsIgnoreCase(pName))
  622. tanqy1 = pValue;
  623. else if (PARAM_TANQY2.equalsIgnoreCase(pName))
  624. tanqy2 = pValue;
  625. else if (PARAM_TANQZ1.equalsIgnoreCase(pName))
  626. tanqz1 = pValue;
  627. else if (PARAM_TANQZ2.equalsIgnoreCase(pName))
  628. tanqz2 = pValue;
  629. else if (PARAM_TANHQPOW.equalsIgnoreCase(pName))
  630. tanhqpow = pValue;
  631. else if (PARAM_TANHQX1.equalsIgnoreCase(pName))
  632. tanhqx1 = pValue;
  633. else if (PARAM_TANHQX2.equalsIgnoreCase(pName))
  634. tanhqx2 = pValue;
  635. else if (PARAM_TANHQY1.equalsIgnoreCase(pName))
  636. tanhqy1 = pValue;
  637. else if (PARAM_TANHQY2.equalsIgnoreCase(pName))
  638. tanhqy2 = pValue;
  639. else if (PARAM_TANHQZ1.equalsIgnoreCase(pName))
  640. tanhqz1 = pValue;
  641. else if (PARAM_TANHQZ2.equalsIgnoreCase(pName))
  642. tanhqz2 = pValue;
  643. else
  644. throw new IllegalArgumentException(pName);
  645. }
  646.  
  647. @Override
  648. public String getName() {
  649. return "quaternion";
  650. }
  651.  
  652. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement