Advertisement
Guest User

geometryczne

a guest
Nov 20th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 19.56 KB | None | 0 0
  1.  
  2. import UIKit
  3.  
  4.  
  5. let solid1 = """
  6. -4.354;-5.362;0.150
  7. -5.142;-5.266;0.150
  8. -5.177;-5.442;0.150
  9.  
  10. -5.142;-5.266;0.150
  11. -5.897;-5.020;0.150
  12. -5.177;-5.442;0.150
  13.  
  14. -5.177;-5.442;0.150
  15. -5.897;-5.020;0.150
  16. -5.965;-5.187;0.150
  17.  
  18. -5.897;-5.020;0.150
  19. -6.590;-4.634;0.150
  20. -5.965;-5.187;0.150
  21.  
  22. -5.965;-5.187;0.150
  23. -6.590;-4.634;0.150
  24. -6.690;-4.784;0.150
  25.  
  26. -6.590;-4.634;0.150
  27. -7.197;-4.123;0.150
  28. -6.690;-4.784;0.150
  29.  
  30. -6.690;-4.784;0.150
  31. -7.197;-4.123;0.150
  32. -7.324;-4.250;0.150
  33.  
  34. -7.197;-4.123;0.150
  35. -7.694;-3.504;0.150
  36. -7.324;-4.250;0.150
  37.  
  38. -7.324;-4.250;0.150
  39. -7.694;-3.504;0.150
  40. -7.844;-3.604;0.150
  41.  
  42. -7.694;-3.504;0.150
  43. -8.063;-2.801;0.150
  44. -7.844;-3.604;0.150
  45.  
  46. -7.844;-3.604;0.150
  47. -8.063;-2.801;0.150
  48. -8.229;-2.870;0.150
  49.  
  50. -8.063;-2.801;0.150
  51. -8.290;-2.040;0.150
  52. -8.229;-2.870;0.150
  53.  
  54. -8.229;-2.870;0.150
  55. -8.290;-2.040;0.150
  56. -8.466;-2.075;0.150
  57.  
  58. -8.290;-2.040;0.150
  59. -8.366;-1.250;0.150
  60. -8.466;-2.075;0.150
  61.  
  62. -8.466;-2.075;0.150
  63. -8.366;-1.250;0.150
  64. -8.466;-0.425;0.150
  65.  
  66. -8.366;-1.250;0.150
  67. -8.290;-0.460;0.150
  68. -8.466;-0.425;0.150
  69.  
  70. -8.466;-0.425;0.150
  71. -8.290;-0.460;0.150
  72. -8.229;0.370;0.150
  73.  
  74. -8.290;-0.460;0.150
  75. -8.063;0.301;0.150
  76. -8.229;0.370;0.150
  77.  
  78. -8.229;0.370;0.150
  79. -8.063;0.301;0.150
  80. -7.844;1.104;0.150
  81.  
  82. -8.063;0.301;0.150
  83. -7.694;1.004;0.150
  84. -7.844;1.104;0.150
  85.  
  86. -7.844;1.104;0.150
  87. -7.694;1.004;0.150
  88. -7.324;1.750;0.150
  89.  
  90. -7.694;1.004;0.150
  91. -7.197;1.623;0.150
  92. -7.324;1.750;0.150
  93.  
  94. -7.324;1.750;0.150
  95. -7.197;1.623;0.150
  96. -6.690;2.284;0.150
  97.  
  98. -7.197;1.623;0.150
  99. -6.590;2.135;0.150
  100. -6.690;2.284;0.150
  101.  
  102. -6.690;2.284;0.150
  103. -6.590;2.135;0.150
  104. -5.965;2.687;0.150
  105.  
  106. -6.590;2.135;0.150
  107. -5.897;2.520;0.150
  108. -5.965;2.687;0.150
  109.  
  110. -5.965;2.687;0.150
  111. -5.897;2.520;0.150
  112. -5.177;2.942;0.150
  113.  
  114. -5.897;2.520;0.150
  115. -5.142;2.766;0.150
  116. -5.177;2.942;0.150
  117.  
  118. -5.177;2.942;0.150
  119. -5.142;2.766;0.150
  120. -4.354;2.862;0.150
  121.  
  122. -5.177;2.942;0.150
  123. -4.354;2.862;0.150
  124. -4.354;3.042;0.150
  125.  
  126. -8.466;-2.075;0.150
  127. -8.466;-0.425;0.150
  128. -8.546;-1.250;0.150
  129.  
  130. -4.354;-5.362;0.150
  131. -5.177;-5.442;0.150
  132. -4.354;-5.542;0.150
  133.  
  134. -8.466;-0.425;-3.550
  135. -8.229;0.370;-3.550
  136. -8.290;-0.460;-3.550
  137.  
  138. -8.466;-0.425;-3.550
  139. -8.290;-0.460;-3.550
  140. -8.366;-1.250;-3.550
  141.  
  142. -8.466;-0.425;-3.550
  143. -8.366;-1.250;-3.550
  144. -8.466;-2.075;-3.550
  145.  
  146. -8.466;-0.425;-3.550
  147. -8.466;-2.075;-3.550
  148. -8.546;-1.250;-3.550
  149.  
  150. -4.354;2.862;-3.550
  151. -5.142;2.766;-3.550
  152. -5.177;2.942;-3.550
  153.  
  154. -5.142;2.766;-3.550
  155. -5.897;2.520;-3.550
  156. -5.177;2.942;-3.550
  157.  
  158. -5.177;2.942;-3.550
  159. -5.897;2.520;-3.550
  160. -5.965;2.687;-3.550
  161.  
  162. -5.897;2.520;-3.550
  163. -6.590;2.135;-3.550
  164. -5.965;2.687;-3.550
  165.  
  166. -5.965;2.687;-3.550
  167. -6.590;2.135;-3.550
  168. -6.690;2.284;-3.550
  169.  
  170. -6.590;2.135;-3.550
  171. -7.197;1.623;-3.550
  172. -6.690;2.284;-3.550
  173.  
  174. -6.690;2.284;-3.550
  175. -7.197;1.623;-3.550
  176. -7.324;1.750;-3.550
  177.  
  178. -7.197;1.623;-3.550
  179. -7.694;1.004;-3.550
  180. -7.324;1.750;-3.550
  181.  
  182. -7.324;1.750;-3.550
  183. -7.694;1.004;-3.550
  184. -7.844;1.104;-3.550
  185.  
  186. -7.694;1.004;-3.550
  187. -8.063;0.301;-3.550
  188. -7.844;1.104;-3.550
  189.  
  190. -7.844;1.104;-3.550
  191. -8.063;0.301;-3.550
  192. -8.229;0.370;-3.550
  193.  
  194. -8.063;0.301;-3.550
  195. -8.290;-0.460;-3.550
  196. -8.229;0.370;-3.550
  197.  
  198. -5.142;-5.266;-3.550
  199. -5.177;-5.442;-3.550
  200. -5.897;-5.020;-3.550
  201.  
  202. -5.177;-5.442;-3.550
  203. -5.965;-5.187;-3.550
  204. -5.897;-5.020;-3.550
  205.  
  206. -5.897;-5.020;-3.550
  207. -5.965;-5.187;-3.550
  208. -6.590;-4.634;-3.550
  209.  
  210. -5.965;-5.187;-3.550
  211. -6.690;-4.784;-3.550
  212. -6.590;-4.634;-3.550
  213.  
  214. -6.590;-4.634;-3.550
  215. -6.690;-4.784;-3.550
  216. -7.197;-4.123;-3.550
  217.  
  218. -6.690;-4.784;-3.550
  219. -7.324;-4.250;-3.550
  220. -7.197;-4.123;-3.550
  221.  
  222. -7.197;-4.123;-3.550
  223. -7.324;-4.250;-3.550
  224. -7.694;-3.504;-3.550
  225.  
  226. -7.324;-4.250;-3.550
  227. -7.844;-3.604;-3.550
  228. -7.694;-3.504;-3.550
  229.  
  230. -7.694;-3.504;-3.550
  231. -7.844;-3.604;-3.550
  232. -8.063;-2.801;-3.550
  233.  
  234. -7.844;-3.604;-3.550
  235. -8.229;-2.870;-3.550
  236. -8.063;-2.801;-3.550
  237.  
  238. -8.063;-2.801;-3.550
  239. -8.229;-2.870;-3.550
  240. -8.290;-2.040;-3.550
  241.  
  242. -8.229;-2.870;-3.550
  243. -8.466;-2.075;-3.550
  244. -8.290;-2.040;-3.550
  245.  
  246. -8.290;-2.040;-3.550
  247. -8.466;-2.075;-3.550
  248. -8.366;-1.250;-3.550
  249.  
  250. -4.354;-5.362;-3.550
  251. -4.354;-5.542;-3.550
  252. -5.177;-5.442;-3.550
  253.  
  254. -4.354;-5.362;-3.550
  255. -5.177;-5.442;-3.550
  256. -5.142;-5.266;-3.550
  257.  
  258. -4.354;2.862;-3.550
  259. -5.177;2.942;-3.550
  260. -4.354;3.042;-3.550
  261.  
  262. -4.354;3.042;-3.550
  263. -5.177;2.942;-3.550
  264. -5.177;2.942;0.150
  265.  
  266. -4.354;3.042;-3.550
  267. -5.177;2.942;0.150
  268. -4.354;3.042;0.150
  269.  
  270. -5.177;2.942;-3.550
  271. -5.965;2.687;-3.550
  272. -5.965;2.687;0.150
  273.  
  274. -5.177;2.942;-3.550
  275. -5.965;2.687;0.150
  276. -5.177;2.942;0.150
  277.  
  278. -5.965;2.687;-3.550
  279. -6.690;2.284;-3.550
  280. -6.690;2.284;0.150
  281.  
  282. -5.965;2.687;-3.550
  283. -6.690;2.284;0.150
  284. -5.965;2.687;0.150
  285.  
  286. -6.690;2.284;-3.550
  287. -7.324;1.750;-3.550
  288. -7.324;1.750;0.150
  289.  
  290. -6.690;2.284;-3.550
  291. -7.324;1.750;0.150
  292. -6.690;2.284;0.150
  293.  
  294. -7.324;1.750;-3.550
  295. -7.844;1.104;-3.550
  296. -7.844;1.104;0.150
  297.  
  298. -7.324;1.750;-3.550
  299. -7.844;1.104;0.150
  300. -7.324;1.750;0.150
  301.  
  302. -7.844;1.104;-3.550
  303. -8.229;0.370;-3.550
  304. -8.229;0.370;0.150
  305.  
  306. -7.844;1.104;-3.550
  307. -8.229;0.370;0.150
  308. -7.844;1.104;0.150
  309.  
  310. -8.229;0.370;-3.550
  311. -8.466;-0.425;-3.550
  312. -8.466;-0.425;0.150
  313.  
  314. -8.229;0.370;-3.550
  315. -8.466;-0.425;0.150
  316. -8.229;0.370;0.150
  317.  
  318. -8.466;-0.425;-3.550
  319. -8.546;-1.250;-3.550
  320. -8.546;-1.250;0.150
  321.  
  322. -8.466;-0.425;-3.550
  323. -8.546;-1.250;0.150
  324. -8.466;-0.425;0.150
  325.  
  326. -8.546;-1.250;-3.550
  327. -8.466;-2.075;-3.550
  328. -8.466;-2.075;0.150
  329.  
  330. -8.546;-1.250;-3.550
  331. -8.466;-2.075;0.150
  332. -8.546;-1.250;0.150
  333.  
  334. -8.466;-2.075;-3.550
  335. -8.229;-2.870;-3.550
  336. -8.229;-2.870;0.150
  337.  
  338. -8.466;-2.075;-3.550
  339. -8.229;-2.870;0.150
  340. -8.466;-2.075;0.150
  341.  
  342. -8.229;-2.870;-3.550
  343. -7.844;-3.604;-3.550
  344. -7.844;-3.604;0.150
  345.  
  346. -8.229;-2.870;-3.550
  347. -7.844;-3.604;0.150
  348. -8.229;-2.870;0.150
  349.  
  350. -7.844;-3.604;-3.550
  351. -7.324;-4.250;-3.550
  352. -7.324;-4.250;0.150
  353.  
  354. -7.844;-3.604;-3.550
  355. -7.324;-4.250;0.150
  356. -7.844;-3.604;0.150
  357.  
  358. -7.324;-4.250;-3.550
  359. -6.690;-4.784;-3.550
  360. -6.690;-4.784;0.150
  361.  
  362. -7.324;-4.250;-3.550
  363. -6.690;-4.784;0.150
  364. -7.324;-4.250;0.150
  365.  
  366. -6.690;-4.784;-3.550
  367. -5.965;-5.187;-3.550
  368. -5.965;-5.187;0.150
  369.  
  370. -6.690;-4.784;-3.550
  371. -5.965;-5.187;0.150
  372. -6.690;-4.784;0.150
  373.  
  374. -5.965;-5.187;-3.550
  375. -5.177;-5.442;-3.550
  376. -5.177;-5.442;0.150
  377.  
  378. -5.965;-5.187;-3.550
  379. -5.177;-5.442;0.150
  380. -5.965;-5.187;0.150
  381.  
  382. -5.177;-5.442;-3.550
  383. -4.354;-5.542;-3.550
  384. -4.354;-5.542;0.150
  385.  
  386. -5.177;-5.442;-3.550
  387. -4.354;-5.542;0.150
  388. -5.177;-5.442;0.150
  389.  
  390. -4.354;-5.542;-3.550
  391. -4.354;-5.362;-3.550
  392. -4.354;-5.362;0.150
  393.  
  394. -4.354;-5.542;-3.550
  395. -4.354;-5.362;0.150
  396. -4.354;-5.542;0.150
  397.  
  398. -4.354;-5.362;-3.550
  399. -5.142;-5.266;-3.550
  400. -5.142;-5.266;0.150
  401.  
  402. -4.354;-5.362;-3.550
  403. -5.142;-5.266;0.150
  404. -4.354;-5.362;0.150
  405.  
  406. -5.142;-5.266;-3.550
  407. -5.897;-5.020;-3.550
  408. -5.897;-5.020;0.150
  409.  
  410. -5.142;-5.266;-3.550
  411. -5.897;-5.020;0.150
  412. -5.142;-5.266;0.150
  413.  
  414. -5.897;-5.020;-3.550
  415. -6.590;-4.634;-3.550
  416. -6.590;-4.634;0.150
  417.  
  418. -5.897;-5.020;-3.550
  419. -6.590;-4.634;0.150
  420. -5.897;-5.020;0.150
  421.  
  422. -6.590;-4.634;-3.550
  423. -7.197;-4.123;-3.550
  424. -7.197;-4.123;0.150
  425.  
  426. -6.590;-4.634;-3.550
  427. -7.197;-4.123;0.150
  428. -6.590;-4.634;0.150
  429.  
  430. -7.197;-4.123;-3.550
  431. -7.694;-3.504;-3.550
  432. -7.694;-3.504;0.150
  433.  
  434. -7.197;-4.123;-3.550
  435. -7.694;-3.504;0.150
  436. -7.197;-4.123;0.150
  437.  
  438. -7.694;-3.504;-3.550
  439. -8.063;-2.801;-3.550
  440. -8.063;-2.801;0.150
  441.  
  442. -7.694;-3.504;-3.550
  443. -8.063;-2.801;0.150
  444. -7.694;-3.504;0.150
  445.  
  446. -8.063;-2.801;-3.550
  447. -8.290;-2.040;-3.550
  448. -8.290;-2.040;0.150
  449.  
  450. -8.063;-2.801;-3.550
  451. -8.290;-2.040;0.150
  452. -8.063;-2.801;0.150
  453.  
  454. -8.290;-2.040;-3.550
  455. -8.366;-1.250;-3.550
  456. -8.366;-1.250;0.150
  457.  
  458. -8.290;-2.040;-3.550
  459. -8.366;-1.250;0.150
  460. -8.290;-2.040;0.150
  461.  
  462. -8.366;-1.250;-3.550
  463. -8.290;-0.460;-3.550
  464. -8.290;-0.460;0.150
  465.  
  466. -8.366;-1.250;-3.550
  467. -8.290;-0.460;0.150
  468. -8.366;-1.250;0.150
  469.  
  470. -8.290;-0.460;-3.550
  471. -8.063;0.301;-3.550
  472. -8.063;0.301;0.150
  473.  
  474. -8.290;-0.460;-3.550
  475. -8.063;0.301;0.150
  476. -8.290;-0.460;0.150
  477.  
  478. -8.063;0.301;-3.550
  479. -7.694;1.004;-3.550
  480. -7.694;1.004;0.150
  481.  
  482. -8.063;0.301;-3.550
  483. -7.694;1.004;0.150
  484. -8.063;0.301;0.150
  485.  
  486. -7.694;1.004;-3.550
  487. -7.197;1.623;-3.550
  488. -7.197;1.623;0.150
  489.  
  490. -7.694;1.004;-3.550
  491. -7.197;1.623;0.150
  492. -7.694;1.004;0.150
  493.  
  494. -7.197;1.623;-3.550
  495. -6.590;2.135;-3.550
  496. -6.590;2.135;0.150
  497.  
  498. -7.197;1.623;-3.550
  499. -6.590;2.135;0.150
  500. -7.197;1.623;0.150
  501.  
  502. -6.590;2.135;-3.550
  503. -5.897;2.520;-3.550
  504. -5.897;2.520;0.150
  505.  
  506. -6.590;2.135;-3.550
  507. -5.897;2.520;0.150
  508. -6.590;2.135;0.150
  509.  
  510. -5.897;2.520;-3.550
  511. -5.142;2.766;-3.550
  512. -5.142;2.766;0.150
  513.  
  514. -5.897;2.520;-3.550
  515. -5.142;2.766;0.150
  516. -5.897;2.520;0.150
  517.  
  518. -5.142;2.766;-3.550
  519. -4.354;2.862;-3.550
  520. -4.354;2.862;0.150
  521.  
  522. -5.142;2.766;-3.550
  523. -4.354;2.862;0.150
  524. -5.142;2.766;0.150
  525.  
  526. -4.354;2.862;-3.550
  527. -4.354;3.042;-3.550
  528. -4.354;3.042;0.150
  529.  
  530. -4.354;2.862;-3.550
  531. -4.354;3.042;0.150
  532. -4.354;2.862;0.150
  533. """
  534. let solid2 = """
  535. 3.997;7.000;3.250
  536. 3.978;7.096;3.250
  537. 3.924;7.177;3.250
  538.  
  539. 3.997;7.000;3.250
  540. 3.924;7.177;3.250
  541. 3.843;7.231;3.250
  542.  
  543. 3.997;7.000;3.250
  544. 3.843;7.231;3.250
  545. 3.747;7.250;3.250
  546.  
  547. 3.997;7.000;3.250
  548. 3.747;7.250;3.250
  549. 3.651;7.231;3.250
  550.  
  551. 3.997;7.000;3.250
  552. 3.651;7.231;3.250
  553. 3.570;7.177;3.250
  554.  
  555. 3.997;7.000;3.250
  556. 3.570;7.177;3.250
  557. 3.516;7.096;3.250
  558.  
  559. 3.997;7.000;3.250
  560. 3.516;7.096;3.250
  561. 3.497;7.000;3.250
  562.  
  563. 3.997;7.000;3.250
  564. 3.497;7.000;3.250
  565. 3.516;6.904;3.250
  566.  
  567. 3.997;7.000;3.250
  568. 3.516;6.904;3.250
  569. 3.570;6.823;3.250
  570.  
  571. 3.997;7.000;3.250
  572. 3.570;6.823;3.250
  573. 3.651;6.769;3.250
  574.  
  575. 3.997;7.000;3.250
  576. 3.651;6.769;3.250
  577. 3.747;6.750;3.250
  578.  
  579. 3.997;7.000;3.250
  580. 3.747;6.750;3.250
  581. 3.843;6.769;3.250
  582.  
  583. 3.997;7.000;3.250
  584. 3.843;6.769;3.250
  585. 3.924;6.823;3.250
  586.  
  587. 3.997;7.000;3.250
  588. 3.924;6.823;3.250
  589. 3.978;6.904;3.250
  590.  
  591. 3.997;7.000;-3.550
  592. 3.978;6.904;-3.550
  593. 3.924;6.823;-3.550
  594.  
  595. 3.997;7.000;-3.550
  596. 3.924;6.823;-3.550
  597. 3.843;6.769;-3.550
  598.  
  599. 3.997;7.000;-3.550
  600. 3.843;6.769;-3.550
  601. 3.747;6.750;-3.550
  602.  
  603. 3.997;7.000;-3.550
  604. 3.747;6.750;-3.550
  605. 3.651;6.769;-3.550
  606.  
  607. 3.997;7.000;-3.550
  608. 3.651;6.769;-3.550
  609. 3.570;6.823;-3.550
  610.  
  611. 3.997;7.000;-3.550
  612. 3.570;6.823;-3.550
  613. 3.516;6.904;-3.550
  614.  
  615. 3.997;7.000;-3.550
  616. 3.516;6.904;-3.550
  617. 3.497;7.000;-3.550
  618.  
  619. 3.997;7.000;-3.550
  620. 3.497;7.000;-3.550
  621. 3.516;7.096;-3.550
  622.  
  623. 3.997;7.000;-3.550
  624. 3.516;7.096;-3.550
  625. 3.570;7.177;-3.550
  626.  
  627. 3.997;7.000;-3.550
  628. 3.570;7.177;-3.550
  629. 3.651;7.231;-3.550
  630.  
  631. 3.997;7.000;-3.550
  632. 3.651;7.231;-3.550
  633. 3.747;7.250;-3.550
  634.  
  635. 3.997;7.000;-3.550
  636. 3.747;7.250;-3.550
  637. 3.843;7.231;-3.550
  638.  
  639. 3.997;7.000;-3.550
  640. 3.843;7.231;-3.550
  641. 3.924;7.177;-3.550
  642.  
  643. 3.997;7.000;-3.550
  644. 3.924;7.177;-3.550
  645. 3.978;7.096;-3.550
  646.  
  647. 3.997;7.000;-3.550
  648. 3.978;7.096;-3.550
  649. 3.978;7.096;3.250
  650.  
  651. 3.997;7.000;-3.550
  652. 3.978;7.096;3.250
  653. 3.997;7.000;3.250
  654.  
  655. 3.978;7.096;-3.550
  656. 3.924;7.177;-3.550
  657. 3.924;7.177;3.250
  658.  
  659. 3.978;7.096;-3.550
  660. 3.924;7.177;3.250
  661. 3.978;7.096;3.250
  662.  
  663. 3.924;7.177;-3.550
  664. 3.843;7.231;-3.550
  665. 3.843;7.231;3.250
  666.  
  667. 3.924;7.177;-3.550
  668. 3.843;7.231;3.250
  669. 3.924;7.177;3.250
  670.  
  671. 3.843;7.231;-3.550
  672. 3.747;7.250;-3.550
  673. 3.747;7.250;3.250
  674.  
  675. 3.843;7.231;-3.550
  676. 3.747;7.250;3.250
  677. 3.843;7.231;3.250
  678.  
  679. 3.747;7.250;-3.550
  680. 3.651;7.231;-3.550
  681. 3.651;7.231;3.250
  682.  
  683. 3.747;7.250;-3.550
  684. 3.651;7.231;3.250
  685. 3.747;7.250;3.250
  686.  
  687. 3.651;7.231;-3.550
  688. 3.570;7.177;-3.550
  689. 3.570;7.177;3.250
  690.  
  691. 3.651;7.231;-3.550
  692. 3.570;7.177;3.250
  693. 3.651;7.231;3.250
  694.  
  695. 3.570;7.177;-3.550
  696. 3.516;7.096;-3.550
  697. 3.516;7.096;3.250
  698.  
  699. 3.570;7.177;-3.550
  700. 3.516;7.096;3.250
  701. 3.570;7.177;3.250
  702.  
  703. 3.516;7.096;-3.550
  704. 3.497;7.000;-3.550
  705. 3.497;7.000;3.250
  706.  
  707. 3.516;7.096;-3.550
  708. 3.497;7.000;3.250
  709. 3.516;7.096;3.250
  710.  
  711. 3.497;7.000;-3.550
  712. 3.516;6.904;-3.550
  713. 3.516;6.904;3.250
  714.  
  715. 3.497;7.000;-3.550
  716. 3.516;6.904;3.250
  717. 3.497;7.000;3.250
  718.  
  719. 3.516;6.904;-3.550
  720. 3.570;6.823;-3.550
  721. 3.570;6.823;3.250
  722.  
  723. 3.516;6.904;-3.550
  724. 3.570;6.823;3.250
  725. 3.516;6.904;3.250
  726.  
  727. 3.570;6.823;-3.550
  728. 3.651;6.769;-3.550
  729. 3.651;6.769;3.250
  730.  
  731. 3.570;6.823;-3.550
  732. 3.651;6.769;3.250
  733. 3.570;6.823;3.250
  734.  
  735. 3.651;6.769;-3.550
  736. 3.747;6.750;-3.550
  737. 3.747;6.750;3.250
  738.  
  739. 3.651;6.769;-3.550
  740. 3.747;6.750;3.250
  741. 3.651;6.769;3.250
  742.  
  743. 3.747;6.750;-3.550
  744. 3.843;6.769;-3.550
  745. 3.843;6.769;3.250
  746.  
  747. 3.747;6.750;-3.550
  748. 3.843;6.769;3.250
  749. 3.747;6.750;3.250
  750.  
  751. 3.843;6.769;-3.550
  752. 3.924;6.823;-3.550
  753. 3.924;6.823;3.250
  754.  
  755. 3.843;6.769;-3.550
  756. 3.924;6.823;3.250
  757. 3.843;6.769;3.250
  758.  
  759. 3.924;6.823;-3.550
  760. 3.978;6.904;-3.550
  761. 3.978;6.904;3.250
  762.  
  763. 3.924;6.823;-3.550
  764. 3.978;6.904;3.250
  765. 3.924;6.823;3.250
  766.  
  767. 3.978;6.904;-3.550
  768. 3.997;7.000;-3.550
  769. 3.997;7.000;3.250
  770.  
  771. 3.978;6.904;-3.550
  772. 3.997;7.000;3.250
  773. 3.978;6.904;3.250
  774. """
  775.  
  776. struct Point {
  777.     let x: Double
  778.     let y: Double
  779.     let z: Double
  780.  
  781.     func printPoint() {
  782.         print("new point: \(x) \(y) \(z)")
  783.     }
  784. }
  785.  
  786. func +(lhs: Point, rhs: Point) -> Point {
  787.     return Point(x: lhs.x + rhs.x, y: lhs.y + rhs.y, z: lhs.z + rhs.z)
  788. }
  789.  
  790. func -(lhs: Point, rhs: Point) -> Point {
  791.     return Point(x: lhs.x - rhs.x, y: lhs.y - rhs.y, z: lhs.z - rhs.z)
  792. }
  793.  
  794. func *(lhs: Point, rhs: Double) -> Point {
  795.     return Point(x: lhs.x * rhs, y: lhs.y * rhs, z: lhs.z * rhs)
  796. }
  797.  
  798. func *(lhs: Double, rhs: Point) -> Point {
  799.     return Point(x: rhs.x * lhs, y: rhs.y * lhs, z: rhs.z * lhs)
  800. }
  801.  
  802.  
  803. func dot(_ u: Point, _ v: Point) -> Double {
  804.     return u.x * v.x + u.y * v.y + u.z * v.z
  805. }
  806.  
  807. func norm(_ v: Point) -> Double {
  808.     return dot(v,v).squareRoot()
  809. }
  810.  
  811. func d(_ u: Point,_ v: Point) -> Double {
  812.     return norm(u-v)
  813. }
  814.  
  815. struct Face {
  816.     var v1: Point
  817.     var v2: Point
  818.     var v3: Point
  819.  
  820.     func printFace() {
  821.         print("Face: \(v1.printPoint()) \(v2.printPoint()) \(v3.printPoint())")
  822.     }
  823. }
  824.  
  825. struct Edge {
  826.     let p1: Point
  827.     let p2: Point
  828. }
  829.  
  830. struct Solid {
  831.     let size: Int
  832.     var faces: [Face]
  833. }
  834.  
  835. struct AxisAlignedBoundingBox {
  836.     let minX: Double
  837.     let minY: Double
  838.     let minZ: Double
  839.     let maxX: Double
  840.     let maxY: Double
  841.     let maxZ: Double
  842. }
  843.  
  844. struct Plane {
  845.     let point: Point
  846.     let normal: Double
  847. }
  848.  
  849. extension Double {
  850.     func toSecondPower() -> Double {
  851.         return self * self
  852.     }
  853. }
  854.  
  855. // MARK:- Points
  856.  
  857. func distance(between firstPoint: Point, and secondPoint: Point) -> Double {
  858.     let x = (secondPoint.x - firstPoint.x).toSecondPower()
  859.     let y = (secondPoint.y - firstPoint.y).toSecondPower()
  860.     let z = (secondPoint.z - firstPoint.z).toSecondPower()
  861.    
  862.     return (x + y + z).squareRoot()
  863. }
  864.  
  865. let p1 = Point(x: 0.0, y: 0.0, z: 0.0)
  866. let p2 = Point(x: 1.0, y: 2.0, z: 3.0)
  867.  
  868. let testDistance = distance(between: p1, and: p2)
  869.  
  870. // MARK:- Edge and Point
  871.  
  872. func distance(between edge: Edge, and point: Point) -> Double {
  873.     let v = edge.p2 - edge.p1
  874.     let w = point - edge.p1
  875.    
  876.     let c1 = dot(w,v)
  877.     let c2 = dot(v,v)
  878.     let b = c1 / c2
  879.    
  880.     let pointB = edge.p1 + b*v
  881.     return d(point,pointB)
  882. }
  883.  
  884. let edge = Edge(p1: p1, p2: p2)
  885.  
  886. let point = Point(x: 4.0, y: 5.0, z: 6.0)
  887.  
  888. let pointToEdgeDistance = distance(between: edge, and: point)
  889.  
  890. // MARK:- Edges
  891.  
  892. func distance(between firstEdge: Edge, and secondEdge: Edge) -> Double {
  893.     let smallNumber = 0.000000000001
  894.    
  895.     let u = firstEdge.p2 - firstEdge.p1
  896.     let v = secondEdge.p2 - secondEdge.p1
  897.     let w = firstEdge.p1 - secondEdge.p1
  898.    
  899.     let a = dot(u,u)
  900.     let b = dot(u,v)
  901.     let c = dot(v,v)
  902.     let d = dot(u,w)
  903.     let e = dot(v,w)
  904.     let D = a*c - b*b
  905.  
  906.     var sc = 0.0
  907.     var tc = 0.0
  908.  
  909.     if D < smallNumber {
  910.         sc = 0.0
  911.         tc = b>c ? d/b : e/c
  912.     } else {
  913.         sc = (b*e - c*d) / D
  914.         tc = (a*e - b*d) / D
  915.     }
  916.  
  917.     let dP = w + (sc * u) - (tc*v)
  918.  
  919.     return norm(dP)
  920. }
  921.  
  922. let otherEdge = Edge(p1: Point(x: 300.0, y: -300.0, z: 200.0), p2: Point(x: 500.0,y: 100.0,z: 900.0))
  923. let distanceBetweenTwoEdges = distance(between: edge, and: otherEdge)
  924.  
  925.  
  926. // MARK:- Face and Point
  927.  
  928. func distance(between face: Face, and point: Point) -> Double {
  929.     let distanceV1 = distance(between: face.v1, and: point)
  930.     let distanceV2 = distance(between: face.v2, and: point)
  931.     let distanceV3 = distance(between: face.v3, and: point)
  932.  
  933.     return [distanceV1, distanceV2, distanceV3].min()!
  934. }
  935.  
  936. func generatePlane(for face: Face) -> Plane {
  937.  
  938.  
  939.  
  940.     return Plane(point: <#T##Point#>, normal: <#T##Double#>)
  941. }
  942.  
  943. func distance2(between face: Face, and point: Point) -> Double {
  944.    
  945.  
  946. }
  947.  
  948.  
  949. let face = Face(v1: Point(x:5.0, y:5.0, z:5.0), v2: Point(x:25.0, y:25.0, z:25.0), v3: Point(x:55.0, y:55.0, z:55.0))
  950. distance(between: face, and: point)
  951.  
  952.  
  953. // MARK:- Edge and Face
  954.  
  955. func distance(between edge: Edge, and face: Face) -> Double {
  956.     let distanceP1 = distance(between: face, and: edge.p1)
  957.     let distanceP2 = distance(between: face, and: edge.p2)
  958.     return [distanceP1,distanceP2].min()!
  959. }
  960.  
  961. distance(between: edge, and: face)
  962.  
  963. // MARK:- Faces
  964.  
  965. func distance(between firstFace: Face, and secondFace: Face) -> Double {
  966.     let d1 = distance(between: firstFace.v1, and: secondFace.v1)
  967.     let d2 = distance(between: firstFace.v1, and: secondFace.v2)
  968.     let d3 = distance(between: firstFace.v1, and: secondFace.v3)
  969.  
  970.     let d4 = distance(between: firstFace.v2, and: secondFace.v1)
  971.     let d5 = distance(between: firstFace.v2, and: secondFace.v2)
  972.     let d6 = distance(between: firstFace.v2, and: secondFace.v3)
  973.  
  974.     let d7 = distance(between: firstFace.v3, and: secondFace.v1)
  975.     let d8 = distance(between: firstFace.v3, and: secondFace.v1)
  976.     let d9 = distance(between: firstFace.v3, and: secondFace.v1)
  977.  
  978.     return [d1,d2,d3,d4,d5,d6,d7,d8,d9].min()!
  979. }
  980.  
  981. // MARK:- Solids
  982.  
  983. func distance(between firstSolid: Solid, and secondSolid: Solid) -> Double {
  984.     var result = Double.greatestFiniteMagnitude
  985.     for firstSolidFace in firstSolid.faces {
  986.         for secondSolidFace in secondSolid.faces {
  987.             let distanceBetweenFaces = distance(between: firstSolidFace, and: secondSolidFace)
  988.  
  989.             if distanceBetweenFaces == 0.0 {
  990.                 firstSolidFace.printFace()
  991.                 print("second")
  992.                 secondSolidFace.printFace()
  993.  
  994.             }
  995.  
  996.             if result > distanceBetweenFaces {
  997.                 result = distanceBetweenFaces
  998.             }
  999.         }
  1000.     }
  1001.     return result
  1002. }
  1003.  
  1004. // MARK:- AABB
  1005.  
  1006. func getAABB(from solid: Solid) -> AxisAlignedBoundingBox {
  1007.     let max = Double.greatestFiniteMagnitude
  1008.  
  1009.     var minX = max
  1010.     var minY = max
  1011.     var minZ = max
  1012.     var maxX = -max
  1013.     var maxY = -max
  1014.     var maxZ = -max
  1015.  
  1016.     for face in solid.faces {
  1017.         for point in [face.v1,face.v2,face.v3] {
  1018.             if point.x > maxX { maxX = point.x }
  1019.             if point.x < minX { minX = point.x }
  1020.             if point.y > maxY { maxY = point.y }
  1021.             if point.y < minY { minY = point.y }
  1022.             if point.z > maxZ { maxZ = point.z }
  1023.             if point.z < minZ { minZ = point.z }
  1024.         }
  1025.     }
  1026.     print("minX: \(minX), minY: \(minY), minZ: \(minZ), maxX: \(maxX), maxY: \(maxY), maxZ: \(maxZ)")
  1027.     return AxisAlignedBoundingBox(minX: minX, minY: minY, minZ: minZ, maxX: maxX, maxY: maxY, maxZ: maxZ)
  1028. }
  1029.  
  1030. // MARK:- Read input
  1031.  
  1032. func readSolid(_ solidString: String) -> Solid {
  1033.     var resultSolid = Solid(size: 0, faces: [Face]())
  1034.  
  1035.     let facesStrings = solidString.components(separatedBy: "\n\n")
  1036.  
  1037.     for faceString in facesStrings {
  1038.         let pointsStrings = faceString.components(separatedBy: "\n")
  1039.  
  1040.         let xyzV1 = pointsStrings[0].components(separatedBy: ";")
  1041.         let v1 = Point(x: Double(xyzV1[0])!, y: Double(xyzV1[1])!, z: Double(xyzV1[2])!)
  1042.  
  1043.         let xyzV2 = pointsStrings[1].components(separatedBy: ";")
  1044.         let v2 = Point(x: Double(xyzV1[0])!, y: Double(xyzV1[1])!, z: Double(xyzV1[2])!)
  1045.  
  1046.         let xyzV3 = pointsStrings[2].components(separatedBy: ";")
  1047.         let v3 = Point(x: Double(xyzV1[0])!, y: Double(xyzV1[1])!, z: Double(xyzV1[2])!)
  1048.  
  1049.         let newFace = Face(v1: v1, v2: v2, v3: v3)
  1050.  
  1051.         resultSolid.faces.append(newFace)
  1052.  
  1053.     }
  1054.  
  1055.     return resultSolid
  1056. }
  1057.  
  1058. let inputSolid1 = readSolid(solid1)
  1059. let inputSolid2 = readSolid(solid2)
  1060.  
  1061. getAABB(from: inputSolid1)
  1062. getAABB(from: inputSolid2)
  1063.  
  1064. let distanceBetweenSolids = distance(between: inputSolid1, and: inputSolid2)
  1065. print(distanceBetweenSolids)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement