prct2tex.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692
  1. #include<stdio.h>
  2. #define POLYGON_DIMENSION 20
  3. /* From FAOSOIL CD, after USDA 1951, p209 */
  4. struct vector
  5. {
  6. double sand;
  7. double clay;
  8. double silt;
  9. };
  10. double point_in_triangle(double point_x, double point_y, double point_z,
  11. double t1_x, double t1_y, double t1_z, double t2_x,
  12. double t2_y, double t2_z, double t3_x, double t3_y,
  13. double t3_z)
  14. {
  15. /*G_message("in function: sand=%5.3f clay=%5.3f silt=%5.3f",
  16. point_x,point_y,point_z); */
  17. double answer;
  18. double answer1_x, answer1_y, answer1_z;
  19. double answer2_x, answer2_y, answer2_z;
  20. double answer3_x, answer3_y, answer3_z;
  21. /* Consider three points forming a trinagle from a given soil class boundary ABC */
  22. /* Consider F an additional point in space */
  23. double af1, af2, af3; /*Points for vector AF */
  24. double bf1, bf2, bf3; /*Points for vector BF */
  25. double cf1, cf2, cf3; /*Points for vector CF */
  26. double ab1, ab2, ab3; /*Points for vector AB */
  27. double bc1, bc2, bc3; /*Points for vector BC */
  28. double ca1, ca2, ca3; /*Points for vector CA */
  29. /* Create vectors AB, BC and CA */
  30. ab1 = (t2_x - t1_x);
  31. ab2 = (t2_y - t1_y);
  32. ab3 = (t2_z - t1_z);
  33. bc1 = (t3_x - t2_x);
  34. bc2 = (t3_y - t2_y);
  35. bc3 = (t3_z - t2_z);
  36. ca1 = (t1_x - t3_x);
  37. ca2 = (t1_y - t3_y);
  38. ca3 = (t1_z - t3_z);
  39. /* Create vectors AF, BF and CF */
  40. af1 = (point_x - t1_x);
  41. af2 = (point_y - t1_y);
  42. af3 = (point_z - t1_z);
  43. bf1 = (point_x - t2_x);
  44. bf2 = (point_y - t2_y);
  45. bf3 = (point_z - t2_z);
  46. cf1 = (point_x - t3_x);
  47. cf2 = (point_y - t3_y);
  48. cf3 = (point_z - t3_z);
  49. /* Calculate the following CrossProducts: */
  50. /* AFxAB */
  51. answer1_x = (af2 * ab3) - (af3 * ab2);
  52. answer1_y = (af3 * ab1) - (af1 * ab3);
  53. answer1_z = (af1 * ab2) - (af2 * ab1);
  54. /* G_message("answer(AFxAB)= %f %f %f",answer1_x, answer1_y, answer1_z); */
  55. /*BFxBC */
  56. answer2_x = (bf2 * bc3) - (bf3 * bc2);
  57. answer2_y = (bf3 * bc1) - (bf1 * bc3);
  58. answer2_z = (bf1 * bc2) - (bf2 * bc1);
  59. /* G_message("answer(BFxBC)= %f %f %f",answer2_x, answer2_y, answer2_z); */
  60. /*CFxCA */
  61. answer3_x = (cf2 * ca3) - (cf3 * ca2);
  62. answer3_y = (cf3 * ca1) - (cf1 * ca3);
  63. answer3_z = (cf1 * ca2) - (cf2 * ca1);
  64. /* G_message("answer(CFxCA)= %f %f %f",answer3_x, answer3_y, answer3_z); */
  65. answer = 0.0; /*initialize value */
  66. if ((int)answer1_x >= 0 && (int)answer2_x >= 0 && (int)answer3_x >= 0) {
  67. answer += 1.0;
  68. }
  69. else if ((int)answer1_x <= 0 && (int)answer2_x <= 0 &&
  70. (int)answer3_x <= 0) {
  71. answer -= 1.0;
  72. }
  73. if ((int)answer1_y >= 0 && (int)answer2_y >= 0 && (int)answer3_y >= 0) {
  74. answer += 1.0;
  75. }
  76. else if ((int)answer1_y <= 0 && (int)answer2_y <= 0 &&
  77. (int)answer3_y <= 0) {
  78. answer -= 1.0;
  79. }
  80. if ((int)answer1_z >= 0 && (int)answer2_z >= 0 && (int)answer3_z >= 0) {
  81. answer += 1.0;
  82. }
  83. else if ((int)answer1_z <= 0 && (int)answer2_z <= 0 &&
  84. (int)answer3_z <= 0) {
  85. answer -= 1.0;
  86. }
  87. if (answer == 3 || answer == -3) {
  88. answer = 1;
  89. }
  90. else {
  91. answer = 0;
  92. }
  93. return answer;
  94. }
  95. int prct2tex(double sand_input, double clay_input, double silt_input)
  96. {
  97. /*G_message("%5.3f||%5.3f||%5.3f",sand_input,clay_input,silt_input); */
  98. /* set up index for soil texture classes */
  99. int index = 20;
  100. /* set up mark index for inside/outside polygon check */
  101. double mark[POLYGON_DIMENSION] = { 0.0 };
  102. /*G_message("in prct2tex()"); */
  103. /*setup the 3Dvectors and initialize them */
  104. /* index 0 */
  105. struct vector cls_clay[POLYGON_DIMENSION] = { { 0.0 } };
  106. /* index 1 */
  107. struct vector cls_sandy_clay[POLYGON_DIMENSION] = { { 0.0 } };
  108. /* index 2 */
  109. struct vector cls_silty_clay[POLYGON_DIMENSION] = { { 0.0 } };
  110. /* index 3 */
  111. struct vector cls_sandy_clay_loam[POLYGON_DIMENSION] = { { 0.0 } };
  112. /* index 4 */
  113. struct vector cls_clay_loam[POLYGON_DIMENSION] = { { 0.0 } };
  114. /* index 5 */
  115. struct vector cls_silty_clay_loam[POLYGON_DIMENSION] = { { 0.0 } };
  116. /* index 6 */
  117. struct vector cls_sand[POLYGON_DIMENSION] = { { 0.0 } };
  118. /* index 7 */
  119. struct vector cls_loamy_sand[POLYGON_DIMENSION] = { { 0.0 } };
  120. /* index 8 */
  121. struct vector cls_sandy_loam[POLYGON_DIMENSION] = { { 0.0 } };
  122. /* index 9 */
  123. struct vector cls_loam[POLYGON_DIMENSION] = { { 0.0 } };
  124. /* index 10 */
  125. struct vector cls_silt_loam[POLYGON_DIMENSION] = { { 0.0 } };
  126. /* index 11 */
  127. struct vector cls_silt[POLYGON_DIMENSION] = { { 0.0 } };
  128. if ((sand_input + clay_input + silt_input) <= 10.0) {
  129. sand_input = sand_input * 100.0;
  130. clay_input = clay_input * 100.0;
  131. silt_input = silt_input * 100.0;
  132. }
  133. /*G_message("%5.3f||%5.3f||%5.3f|",sand_input,clay_input,silt_input); */
  134. /*Feed the polygons for index 0 */
  135. cls_clay[0].sand = 0.0;
  136. cls_clay[0].clay = 100.0;
  137. cls_clay[0].silt = 0.0;
  138. cls_clay[1].sand = 0.0;
  139. cls_clay[1].clay = 60.0;
  140. cls_clay[1].silt = 40.0;
  141. cls_clay[2].sand = 20.0;
  142. cls_clay[2].clay = 40.0;
  143. cls_clay[2].silt = 40.0;
  144. cls_clay[3].sand = 50.0;
  145. cls_clay[3].clay = 40.0;
  146. cls_clay[3].silt = 10.0;
  147. cls_clay[4].sand = 50.0;
  148. cls_clay[4].clay = 50.0;
  149. cls_clay[4].silt = 0.0;
  150. /* Check for index 0 */
  151. /* G_message("in prct2tex(): check for index 0"); */
  152. mark[0] =
  153. point_in_triangle(sand_input, clay_input, silt_input,
  154. cls_clay[0].sand, cls_clay[0].clay,
  155. cls_clay[0].silt, cls_clay[1].sand,
  156. cls_clay[1].clay, cls_clay[1].silt,
  157. cls_clay[2].sand, cls_clay[2].clay,
  158. cls_clay[2].silt);
  159. mark[1] =
  160. point_in_triangle(sand_input, clay_input, silt_input,
  161. cls_clay[0].sand, cls_clay[0].clay,
  162. cls_clay[0].silt, cls_clay[2].sand,
  163. cls_clay[2].clay, cls_clay[2].silt,
  164. cls_clay[3].sand, cls_clay[3].clay,
  165. cls_clay[3].silt);
  166. mark[2] =
  167. point_in_triangle(sand_input, clay_input, silt_input,
  168. cls_clay[0].sand, cls_clay[0].clay,
  169. cls_clay[0].silt, cls_clay[3].sand,
  170. cls_clay[3].clay, cls_clay[3].silt,
  171. cls_clay[4].sand, cls_clay[4].clay,
  172. cls_clay[4].silt);
  173. /* G_message("Clay: mark[0]=%f",mark[0]); */
  174. /* G_message("Clay: mark[1]=%f",mark[1]); */
  175. /* G_message("Clay: mark[2]=%f",mark[2]); */
  176. if (mark[0] == 1 || mark[1] == 1 || mark[2] == 1) {
  177. index = 0;
  178. /* G_message("Clay: index labelled as 0"); */
  179. }
  180. if (index == 20) { /* if index not found then continue */
  181. /*Feed the polygons for index 1 */
  182. cls_sandy_clay[0].sand = 50.0;
  183. cls_sandy_clay[0].clay = 50.0;
  184. cls_sandy_clay[0].silt = 0.0;
  185. cls_sandy_clay[1].sand = 50.0;
  186. cls_sandy_clay[1].clay = 35.0;
  187. cls_sandy_clay[1].silt = 15.0;
  188. cls_sandy_clay[2].sand = 65.0;
  189. cls_sandy_clay[2].clay = 35.0;
  190. cls_sandy_clay[2].silt = 0.0;
  191. /* Check for index 1 */
  192. mark[0] =
  193. point_in_triangle(sand_input, clay_input, silt_input,
  194. cls_sandy_clay[0].sand, cls_sandy_clay[0].clay,
  195. cls_sandy_clay[0].silt, cls_sandy_clay[1].sand,
  196. cls_sandy_clay[1].clay, cls_sandy_clay[1].silt,
  197. cls_sandy_clay[2].sand, cls_sandy_clay[2].clay,
  198. cls_sandy_clay[2].silt);
  199. /* G_message("Sandy Clay: mark[0]=%f",mark[0]); */
  200. if (mark[0] == 1) {
  201. index = 1;
  202. /* G_message("Sandy Clay: index labelled as 1"); */
  203. }
  204. }
  205. if (index == 20) { /* if index not found then continue */
  206. /*Feed the polygons for index 2 */
  207. cls_silty_clay[0].sand = 0.0;
  208. cls_silty_clay[0].clay = 60.0;
  209. cls_silty_clay[0].silt = 40.0;
  210. cls_silty_clay[1].sand = 0.0;
  211. cls_silty_clay[1].clay = 40.0;
  212. cls_silty_clay[1].silt = 60.0;
  213. cls_silty_clay[2].sand = 20.0;
  214. cls_silty_clay[2].clay = 40.0;
  215. cls_silty_clay[2].silt = 40.0;
  216. /* Check for index 2 */
  217. /* G_message("sand=%5.3f||clay=%5.3f||silt=%5.3f",sand_input,
  218. clay_input,silt_input); */
  219. mark[0] =
  220. point_in_triangle(sand_input, clay_input, silt_input,
  221. cls_silty_clay[0].sand, cls_silty_clay[0].clay,
  222. cls_silty_clay[0].silt, cls_silty_clay[1].sand,
  223. cls_silty_clay[1].clay, cls_silty_clay[1].silt,
  224. cls_silty_clay[2].sand, cls_silty_clay[2].clay,
  225. cls_silty_clay[2].silt);
  226. /* G_message("Silty Clay: mark[0]=%f",mark[0]); */
  227. if (mark[0] == 1) {
  228. index = 2;
  229. /* G_message("Silty Clay: index labelled as 2"); */
  230. }
  231. }
  232. if (index == 20) { /* if index not found then continue */
  233. /*Feed the polygons for index 3 */
  234. cls_sandy_clay_loam[0].sand = 65.0;
  235. cls_sandy_clay_loam[0].clay = 35.0;
  236. cls_sandy_clay_loam[0].silt = 0.0;
  237. cls_sandy_clay_loam[1].sand = 50.0;
  238. cls_sandy_clay_loam[1].clay = 35.0;
  239. cls_sandy_clay_loam[1].silt = 15.0;
  240. cls_sandy_clay_loam[2].sand = 50.0;
  241. cls_sandy_clay_loam[2].clay = 30.0;
  242. cls_sandy_clay_loam[2].silt = 20.0;
  243. cls_sandy_clay_loam[3].sand = 55.0;
  244. cls_sandy_clay_loam[3].clay = 25.0;
  245. cls_sandy_clay_loam[3].silt = 20.0;
  246. cls_sandy_clay_loam[4].sand = 75.0;
  247. cls_sandy_clay_loam[4].clay = 25.0;
  248. cls_sandy_clay_loam[4].silt = 0.0;
  249. /* Check for index 0 */
  250. /* G_message("in prct2tex(): check for index 3"); */
  251. mark[0] =
  252. point_in_triangle(sand_input, clay_input, silt_input,
  253. cls_sandy_clay_loam[0].sand,
  254. cls_sandy_clay_loam[0].clay,
  255. cls_sandy_clay_loam[0].silt,
  256. cls_sandy_clay_loam[1].sand,
  257. cls_sandy_clay_loam[1].clay,
  258. cls_sandy_clay_loam[1].silt,
  259. cls_sandy_clay_loam[2].sand,
  260. cls_sandy_clay_loam[2].clay,
  261. cls_sandy_clay_loam[2].silt);
  262. mark[1] =
  263. point_in_triangle(sand_input, clay_input, silt_input,
  264. cls_sandy_clay_loam[0].sand,
  265. cls_sandy_clay_loam[0].clay,
  266. cls_sandy_clay_loam[0].silt,
  267. cls_sandy_clay_loam[2].sand,
  268. cls_sandy_clay_loam[2].clay,
  269. cls_sandy_clay_loam[2].silt,
  270. cls_sandy_clay_loam[3].sand,
  271. cls_sandy_clay_loam[3].clay,
  272. cls_sandy_clay_loam[3].silt);
  273. mark[2] =
  274. point_in_triangle(sand_input, clay_input, silt_input,
  275. cls_sandy_clay_loam[0].sand,
  276. cls_sandy_clay_loam[0].clay,
  277. cls_sandy_clay_loam[0].silt,
  278. cls_sandy_clay_loam[3].sand,
  279. cls_sandy_clay_loam[3].clay,
  280. cls_sandy_clay_loam[3].silt,
  281. cls_sandy_clay_loam[4].sand,
  282. cls_sandy_clay_loam[4].clay,
  283. cls_sandy_clay_loam[4].silt);
  284. /* G_message("Sandy Clay Loam: mark[0]=%f",mark[0]); */
  285. /* G_message("Sandy Clay Loam: mark[1]=%f",mark[1]); */
  286. /* G_message("Sandy Clay Loam: mark[2]=%f",mark[2]); */
  287. if (mark[0] == 1 || mark[1] == 1 || mark[2] == 1) {
  288. index = 3;
  289. /* G_message("Sandy Clay Loam: index labelled as 3"); */
  290. }
  291. }
  292. if (index == 20) { /* if index not found then continue */
  293. /*Feed the polygons for index 4 */
  294. cls_clay_loam[0].sand = 20.0;
  295. cls_clay_loam[0].clay = 40.0;
  296. cls_clay_loam[0].silt = 40.0;
  297. cls_clay_loam[1].sand = 20.0;
  298. cls_clay_loam[1].clay = 30.0;
  299. cls_clay_loam[1].silt = 50.0;
  300. cls_clay_loam[2].sand = 50.0;
  301. cls_clay_loam[2].clay = 30.0;
  302. cls_clay_loam[2].silt = 20.0;
  303. cls_clay_loam[3].sand = 10.0;
  304. cls_clay_loam[3].clay = 50.0;
  305. cls_clay_loam[3].silt = 40.0;
  306. /* Check for index 4 */
  307. /* G_message("in prct2tex(): check for index 4"); */
  308. mark[0] =
  309. point_in_triangle(sand_input, clay_input, silt_input,
  310. cls_clay_loam[0].sand, cls_clay_loam[0].clay,
  311. cls_clay_loam[0].silt, cls_clay_loam[1].sand,
  312. cls_clay_loam[1].clay, cls_clay_loam[1].silt,
  313. cls_clay_loam[2].sand, cls_clay_loam[2].clay,
  314. cls_clay_loam[2].silt);
  315. mark[1] =
  316. point_in_triangle(sand_input, clay_input, silt_input,
  317. cls_clay_loam[0].sand, cls_clay_loam[0].clay,
  318. cls_clay_loam[0].silt, cls_clay_loam[2].sand,
  319. cls_clay_loam[2].clay, cls_clay_loam[2].silt,
  320. cls_clay_loam[3].sand, cls_clay_loam[3].clay,
  321. cls_clay_loam[3].silt);
  322. /* G_message("Clay Loam: mark[0]=%f",mark[0]); */
  323. /* G_message("Clay Loam: mark[1]=%f",mark[1]); */
  324. if (mark[0] == 1 || mark[1] == 1) {
  325. index = 4;
  326. /* G_message("Clay Loam: index labelled as 4"); */
  327. }
  328. }
  329. if (index == 20) { /* if index not found then continue */
  330. /*Feed the polygons for index 5 */
  331. cls_silty_clay_loam[0].sand = 0.0;
  332. cls_silty_clay_loam[0].clay = 40.0;
  333. cls_silty_clay_loam[0].silt = 60.0;
  334. cls_silty_clay_loam[1].sand = 0.0;
  335. cls_silty_clay_loam[1].clay = 30.0;
  336. cls_silty_clay_loam[1].silt = 70.0;
  337. cls_silty_clay_loam[2].sand = 20.0;
  338. cls_silty_clay_loam[2].clay = 30.0;
  339. cls_silty_clay_loam[2].silt = 50.0;
  340. cls_silty_clay_loam[3].sand = 20.0;
  341. cls_silty_clay_loam[3].clay = 40.0;
  342. cls_silty_clay_loam[3].silt = 40.0;
  343. /* Check for index 5 */
  344. /* G_message("in prct2tex(): check for index 5"); */
  345. mark[0] =
  346. point_in_triangle(sand_input, clay_input, silt_input,
  347. cls_silty_clay_loam[0].sand,
  348. cls_silty_clay_loam[0].clay,
  349. cls_silty_clay_loam[0].silt,
  350. cls_silty_clay_loam[1].sand,
  351. cls_silty_clay_loam[1].clay,
  352. cls_silty_clay_loam[1].silt,
  353. cls_silty_clay_loam[2].sand,
  354. cls_silty_clay_loam[2].clay,
  355. cls_silty_clay_loam[2].silt);
  356. mark[1] =
  357. point_in_triangle(sand_input, clay_input, silt_input,
  358. cls_silty_clay_loam[0].sand,
  359. cls_silty_clay_loam[0].clay,
  360. cls_silty_clay_loam[0].silt,
  361. cls_silty_clay_loam[2].sand,
  362. cls_silty_clay_loam[2].clay,
  363. cls_silty_clay_loam[2].silt,
  364. cls_silty_clay_loam[3].sand,
  365. cls_silty_clay_loam[3].clay,
  366. cls_silty_clay_loam[3].silt);
  367. /* G_message("Silty Clay Loam: mark[0]=%f",mark[0]); */
  368. /* G_message("Silty Clay Loam: mark[1]=%f",mark[1]); */
  369. if (mark[0] == 1 || mark[1] == 1) {
  370. index = 5;
  371. /* G_message("Silty Clay Loam: index labelled as 5"); */
  372. }
  373. }
  374. if (index == 20) { /* if index not found then continue */
  375. /*Feed the polygons for index 6 */
  376. cls_sand[0].sand = 85.0;
  377. cls_sand[0].clay = 15.0;
  378. cls_sand[0].silt = 0.0;
  379. cls_sand[1].sand = 85.0;
  380. cls_sand[1].clay = 0.0;
  381. cls_sand[1].silt = 15.0;
  382. cls_sand[2].sand = 100.0;
  383. cls_sand[2].clay = 0.0;
  384. cls_sand[2].silt = 0.0;
  385. /* Check for index 6 */
  386. mark[0] =
  387. point_in_triangle(sand_input, clay_input, silt_input,
  388. cls_sand[0].sand, cls_sand[0].clay,
  389. cls_sand[0].silt, cls_sand[1].sand,
  390. cls_sand[1].clay, cls_sand[1].silt,
  391. cls_sand[2].sand, cls_sand[2].clay,
  392. cls_sand[2].silt);
  393. /* G_message("Sand: mark[0]=%f",mark[0]); */
  394. if (mark[0] == 1) {
  395. index = 6;
  396. /* G_message("Sand: index labelled as 6"); */
  397. }
  398. }
  399. if (index == 20) { /* if index not found then continue */
  400. /*Feed the polygons for index 7 */
  401. cls_loamy_sand[0].sand = 80.0;
  402. cls_loamy_sand[0].clay = 20.0;
  403. cls_loamy_sand[0].silt = 0.0;
  404. cls_loamy_sand[1].sand = 70.0;
  405. cls_loamy_sand[1].clay = 0.0;
  406. cls_loamy_sand[1].silt = 30.0;
  407. cls_loamy_sand[2].sand = 85.0;
  408. cls_loamy_sand[2].clay = 0.0;
  409. cls_loamy_sand[2].silt = 15.0;
  410. cls_loamy_sand[3].sand = 85.0;
  411. cls_loamy_sand[3].clay = 15.0;
  412. cls_loamy_sand[3].silt = 0.0;
  413. /* Check for index 7 */
  414. /* G_message("in prct2tex(): check for index 7"); */
  415. mark[0] =
  416. point_in_triangle(sand_input, clay_input, silt_input,
  417. cls_loamy_sand[0].sand, cls_loamy_sand[0].clay,
  418. cls_loamy_sand[0].silt, cls_loamy_sand[1].sand,
  419. cls_loamy_sand[1].clay, cls_loamy_sand[1].silt,
  420. cls_loamy_sand[2].sand, cls_loamy_sand[2].clay,
  421. cls_loamy_sand[2].silt);
  422. mark[1] =
  423. point_in_triangle(sand_input, clay_input, silt_input,
  424. cls_loamy_sand[0].sand, cls_loamy_sand[0].clay,
  425. cls_loamy_sand[0].silt, cls_loamy_sand[2].sand,
  426. cls_loamy_sand[2].clay, cls_loamy_sand[2].silt,
  427. cls_loamy_sand[3].sand, cls_loamy_sand[3].clay,
  428. cls_loamy_sand[3].silt);
  429. /* G_message("Loamy Sand: mark[0]=%f",mark[0]); */
  430. /* G_message("Loamy Sand: mark[1]=%f",mark[1]); */
  431. if (mark[0] == 1 || mark[1] == 1) {
  432. index = 7;
  433. /* G_message("Loamy Sand: index labelled as 7"); */
  434. }
  435. }
  436. if (index == 20) { /* if index not found then continue */
  437. /*Feed the polygons for index 8 */
  438. cls_sandy_loam[0].sand = 75.0;
  439. cls_sandy_loam[0].clay = 25.0;
  440. cls_sandy_loam[0].silt = 0.0;
  441. cls_sandy_loam[1].sand = 55.0;
  442. cls_sandy_loam[1].clay = 25.0;
  443. cls_sandy_loam[1].silt = 20.0;
  444. cls_sandy_loam[2].sand = 55.0;
  445. cls_sandy_loam[2].clay = 10.0;
  446. cls_sandy_loam[2].silt = 35.0;
  447. cls_sandy_loam[3].sand = 40.0;
  448. cls_sandy_loam[3].clay = 10.0;
  449. cls_sandy_loam[3].silt = 50.0;
  450. cls_sandy_loam[4].sand = 50.0;
  451. cls_sandy_loam[4].clay = 0.0;
  452. cls_sandy_loam[4].silt = 50.0;
  453. cls_sandy_loam[5].sand = 70.0;
  454. cls_sandy_loam[5].clay = 0.0;
  455. cls_sandy_loam[5].silt = 30.0;
  456. cls_sandy_loam[6].sand = 80.0;
  457. cls_sandy_loam[6].clay = 20.0;
  458. cls_sandy_loam[6].silt = 0.0;
  459. /* Check for index 8 */
  460. /* G_message("in prct2tex(): check for index 8"); */
  461. mark[0] =
  462. point_in_triangle(sand_input, clay_input, silt_input,
  463. cls_sandy_loam[2].sand, cls_sandy_loam[2].clay,
  464. cls_sandy_loam[2].silt, cls_sandy_loam[3].sand,
  465. cls_sandy_loam[3].clay, cls_sandy_loam[3].silt,
  466. cls_sandy_loam[4].sand, cls_sandy_loam[4].clay,
  467. cls_sandy_loam[4].silt);
  468. mark[1] =
  469. point_in_triangle(sand_input, clay_input, silt_input,
  470. cls_sandy_loam[2].sand, cls_sandy_loam[2].clay,
  471. cls_sandy_loam[2].silt, cls_sandy_loam[4].sand,
  472. cls_sandy_loam[4].clay, cls_sandy_loam[4].silt,
  473. cls_sandy_loam[5].sand, cls_sandy_loam[5].clay,
  474. cls_sandy_loam[5].silt);
  475. mark[2] =
  476. point_in_triangle(sand_input, clay_input, silt_input,
  477. cls_sandy_loam[2].sand, cls_sandy_loam[2].clay,
  478. cls_sandy_loam[2].silt, cls_sandy_loam[5].sand,
  479. cls_sandy_loam[5].clay, cls_sandy_loam[5].silt,
  480. cls_sandy_loam[6].sand, cls_sandy_loam[6].clay,
  481. cls_sandy_loam[6].silt);
  482. mark[3] =
  483. point_in_triangle(sand_input, clay_input, silt_input,
  484. cls_sandy_loam[2].sand, cls_sandy_loam[2].clay,
  485. cls_sandy_loam[2].silt, cls_sandy_loam[6].sand,
  486. cls_sandy_loam[6].clay, cls_sandy_loam[6].silt,
  487. cls_sandy_loam[0].sand, cls_sandy_loam[0].clay,
  488. cls_sandy_loam[0].silt);
  489. mark[4] =
  490. point_in_triangle(sand_input, clay_input, silt_input,
  491. cls_sandy_loam[2].sand, cls_sandy_loam[2].clay,
  492. cls_sandy_loam[2].silt, cls_sandy_loam[0].sand,
  493. cls_sandy_loam[0].clay, cls_sandy_loam[0].silt,
  494. cls_sandy_loam[1].sand, cls_sandy_loam[1].clay,
  495. cls_sandy_loam[1].silt);
  496. /* G_message("Sandy Loam: mark[0]=%f",mark[0]); */
  497. /* G_message("Sandy Loam: mark[1]=%f",mark[1]); */
  498. if (mark[0] == 1 || mark[1] == 1 || mark[2] == 1 || mark[3] == 1 ||
  499. mark[4] == 1) {
  500. index = 8;
  501. /* G_message("Sandy Loam: index labelled as 8"); */
  502. }
  503. }
  504. if (index == 20) { /* if index not found then continue */
  505. /*Feed the polygons for index 9 */
  506. cls_loam[0].sand = 50.0;
  507. cls_loam[0].clay = 30.0;
  508. cls_loam[0].silt = 20.0;
  509. cls_loam[1].sand = 20.0;
  510. cls_loam[1].clay = 30.0;
  511. cls_loam[1].silt = 50.0;
  512. cls_loam[2].sand = 40.0;
  513. cls_loam[2].clay = 10.0;
  514. cls_loam[2].silt = 50.0;
  515. cls_loam[3].sand = 55.0;
  516. cls_loam[3].clay = 10.0;
  517. cls_loam[3].silt = 35.0;
  518. cls_loam[4].sand = 55.0;
  519. cls_loam[4].clay = 25.0;
  520. cls_loam[4].silt = 15.0;
  521. /* Check for index 9 */
  522. /* G_message("in prct2tex(): check for index 9"); */
  523. mark[0] =
  524. point_in_triangle(sand_input, clay_input, silt_input,
  525. cls_loam[0].sand, cls_loam[0].clay,
  526. cls_loam[0].silt, cls_loam[1].sand,
  527. cls_loam[1].clay, cls_loam[1].silt,
  528. cls_loam[2].sand, cls_loam[2].clay,
  529. cls_loam[2].silt);
  530. mark[1] =
  531. point_in_triangle(sand_input, clay_input, silt_input,
  532. cls_loam[0].sand, cls_loam[0].clay,
  533. cls_loam[0].silt, cls_loam[2].sand,
  534. cls_loam[2].clay, cls_loam[2].silt,
  535. cls_loam[3].sand, cls_loam[3].clay,
  536. cls_loam[3].silt);
  537. mark[2] =
  538. point_in_triangle(sand_input, clay_input, silt_input,
  539. cls_loam[0].sand, cls_loam[0].clay,
  540. cls_loam[0].silt, cls_loam[3].sand,
  541. cls_loam[3].clay, cls_loam[3].silt,
  542. cls_loam[4].sand, cls_loam[4].clay,
  543. cls_loam[4].silt);
  544. /* G_message("Sandy Loam: mark[0]=%f",mark[0]); */
  545. /* G_message("Sandy Loam: mark[1]=%f",mark[1]); */
  546. if (mark[0] == 1 || mark[1] == 1 || mark[2] == 1) {
  547. index = 9;
  548. /* G_message("Loam: index labelled as 9"); */
  549. }
  550. }
  551. if (index == 20) { /* if index not found then continue */
  552. /*Feed the polygons for index 10 */
  553. cls_silt_loam[0].sand = 20.0;
  554. cls_silt_loam[0].clay = 30.0;
  555. cls_silt_loam[0].silt = 50.0;
  556. cls_silt_loam[1].sand = 0.0;
  557. cls_silt_loam[1].clay = 30.0;
  558. cls_silt_loam[1].silt = 70.0;
  559. cls_silt_loam[2].sand = 0.0;
  560. cls_silt_loam[2].clay = 10.0;
  561. cls_silt_loam[2].silt = 90.0;
  562. cls_silt_loam[3].sand = 15.0;
  563. cls_silt_loam[3].clay = 10.0;
  564. cls_silt_loam[3].silt = 75.0;
  565. cls_silt_loam[4].sand = 25.0;
  566. cls_silt_loam[4].clay = 0.0;
  567. cls_silt_loam[4].silt = 75.0;
  568. cls_silt_loam[5].sand = 50.0;
  569. cls_silt_loam[5].clay = 0.0;
  570. cls_silt_loam[5].silt = 50.0;
  571. /* Check for index 10 */
  572. /* G_message("in prct2tex(): check for index 10"); */
  573. mark[0] =
  574. point_in_triangle(sand_input, clay_input, silt_input,
  575. cls_silt_loam[3].sand, cls_silt_loam[3].clay,
  576. cls_silt_loam[3].silt, cls_silt_loam[4].sand,
  577. cls_silt_loam[4].clay, cls_silt_loam[4].silt,
  578. cls_silt_loam[5].sand, cls_silt_loam[5].clay,
  579. cls_silt_loam[5].silt);
  580. mark[1] =
  581. point_in_triangle(sand_input, clay_input, silt_input,
  582. cls_silt_loam[3].sand, cls_silt_loam[3].clay,
  583. cls_silt_loam[3].silt, cls_silt_loam[5].sand,
  584. cls_silt_loam[5].clay, cls_silt_loam[5].silt,
  585. cls_silt_loam[0].sand, cls_silt_loam[0].clay,
  586. cls_silt_loam[0].silt);
  587. mark[2] =
  588. point_in_triangle(sand_input, clay_input, silt_input,
  589. cls_silt_loam[3].sand, cls_silt_loam[3].clay,
  590. cls_silt_loam[3].silt, cls_silt_loam[0].sand,
  591. cls_silt_loam[0].clay, cls_silt_loam[0].silt,
  592. cls_silt_loam[1].sand, cls_silt_loam[1].clay,
  593. cls_silt_loam[1].silt);
  594. mark[3] =
  595. point_in_triangle(sand_input, clay_input, silt_input,
  596. cls_silt_loam[3].sand, cls_silt_loam[3].clay,
  597. cls_silt_loam[3].silt, cls_silt_loam[1].sand,
  598. cls_silt_loam[1].clay, cls_silt_loam[1].silt,
  599. cls_silt_loam[2].sand, cls_silt_loam[2].clay,
  600. cls_silt_loam[2].silt);
  601. /* G_message("Silt Loam: mark[0]=%f",mark[0]); */
  602. /* G_message("Silt Loam: mark[1]=%f",mark[1]); */
  603. /* G_message("Silt Loam: mark[2]=%f",mark[2]); */
  604. /* G_message("Silt Loam: mark[3]=%f",mark[3]); */
  605. if (mark[0] == 1 || mark[1] == 1 || mark[2] == 1 || mark[3] == 1) {
  606. index = 10;
  607. /* G_message("Silt Loam: index labelled as 10"); */
  608. }
  609. }
  610. if (index == 20) { /* if index not found then continue */
  611. /*Feed the polygons for index 11 */
  612. cls_silt[0].sand = 15.0;
  613. cls_silt[0].clay = 10.0;
  614. cls_silt[0].silt = 75.0;
  615. cls_silt[1].sand = 0.0;
  616. cls_silt[1].clay = 10.0;
  617. cls_silt[1].silt = 90.0;
  618. cls_silt[2].sand = 0.0;
  619. cls_silt[2].clay = 0.0;
  620. cls_silt[2].silt = 100.0;
  621. cls_silt[3].sand = 25.0;
  622. cls_silt[3].clay = 0.0;
  623. cls_silt[3].silt = 75.0;
  624. /* Check for index 11 */
  625. /* G_message("in prct2tex(): check for index 11"); */
  626. mark[0] =
  627. point_in_triangle(sand_input, clay_input, silt_input,
  628. cls_silt[0].sand, cls_silt[0].clay,
  629. cls_silt[0].silt, cls_silt[1].sand,
  630. cls_silt[1].clay, cls_silt[1].silt,
  631. cls_silt[2].sand, cls_silt[2].clay,
  632. cls_silt[2].silt);
  633. mark[1] =
  634. point_in_triangle(sand_input, clay_input, silt_input,
  635. cls_silt[0].sand, cls_silt[0].clay,
  636. cls_silt[0].silt, cls_silt[2].sand,
  637. cls_silt[2].clay, cls_silt[2].silt,
  638. cls_silt[3].sand, cls_silt[3].clay,
  639. cls_silt[3].silt);
  640. /* G_message("Silt: mark[0]=%f",mark[0]); */
  641. /* G_message("Silt: mark[1]=%f",mark[1]); */
  642. if (mark[0] == 1 || mark[1] == 1) {
  643. index = 11;
  644. /* G_message("Silt: index labelled as 11"); */
  645. }
  646. }
  647. /* if(index==0){
  648. G_message("clay");
  649. } else if (index==1){
  650. G_message("sandy clay");
  651. } else if (index==2){
  652. G_message("silty clay");
  653. } else if (index==3){
  654. G_message("sandy clay loam");
  655. } else if (index==4){
  656. G_message("clay loam");
  657. } else if (index==5){
  658. G_message("silty clay loam");
  659. } else if (index==6){
  660. G_message("sand");
  661. } else if (index==7){
  662. G_message("loamy sand");
  663. } else if (index==8){
  664. G_message("sandy loam");
  665. } else if (index==9){
  666. G_message("loam");
  667. } else if (index==10){
  668. G_message("silt loam");
  669. } else if (index==11){
  670. G_message("silt");
  671. } else {
  672. G_message("Unable to allocate class");
  673. } */
  674. return index;
  675. }