Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import UIKit
- let solid1 = """
- -4.354;-5.362;0.150
- -5.142;-5.266;0.150
- -5.177;-5.442;0.150
- -5.142;-5.266;0.150
- -5.897;-5.020;0.150
- -5.177;-5.442;0.150
- -5.177;-5.442;0.150
- -5.897;-5.020;0.150
- -5.965;-5.187;0.150
- -5.897;-5.020;0.150
- -6.590;-4.634;0.150
- -5.965;-5.187;0.150
- -5.965;-5.187;0.150
- -6.590;-4.634;0.150
- -6.690;-4.784;0.150
- -6.590;-4.634;0.150
- -7.197;-4.123;0.150
- -6.690;-4.784;0.150
- -6.690;-4.784;0.150
- -7.197;-4.123;0.150
- -7.324;-4.250;0.150
- -7.197;-4.123;0.150
- -7.694;-3.504;0.150
- -7.324;-4.250;0.150
- -7.324;-4.250;0.150
- -7.694;-3.504;0.150
- -7.844;-3.604;0.150
- -7.694;-3.504;0.150
- -8.063;-2.801;0.150
- -7.844;-3.604;0.150
- -7.844;-3.604;0.150
- -8.063;-2.801;0.150
- -8.229;-2.870;0.150
- -8.063;-2.801;0.150
- -8.290;-2.040;0.150
- -8.229;-2.870;0.150
- -8.229;-2.870;0.150
- -8.290;-2.040;0.150
- -8.466;-2.075;0.150
- -8.290;-2.040;0.150
- -8.366;-1.250;0.150
- -8.466;-2.075;0.150
- -8.466;-2.075;0.150
- -8.366;-1.250;0.150
- -8.466;-0.425;0.150
- -8.366;-1.250;0.150
- -8.290;-0.460;0.150
- -8.466;-0.425;0.150
- -8.466;-0.425;0.150
- -8.290;-0.460;0.150
- -8.229;0.370;0.150
- -8.290;-0.460;0.150
- -8.063;0.301;0.150
- -8.229;0.370;0.150
- -8.229;0.370;0.150
- -8.063;0.301;0.150
- -7.844;1.104;0.150
- -8.063;0.301;0.150
- -7.694;1.004;0.150
- -7.844;1.104;0.150
- -7.844;1.104;0.150
- -7.694;1.004;0.150
- -7.324;1.750;0.150
- -7.694;1.004;0.150
- -7.197;1.623;0.150
- -7.324;1.750;0.150
- -7.324;1.750;0.150
- -7.197;1.623;0.150
- -6.690;2.284;0.150
- -7.197;1.623;0.150
- -6.590;2.135;0.150
- -6.690;2.284;0.150
- -6.690;2.284;0.150
- -6.590;2.135;0.150
- -5.965;2.687;0.150
- -6.590;2.135;0.150
- -5.897;2.520;0.150
- -5.965;2.687;0.150
- -5.965;2.687;0.150
- -5.897;2.520;0.150
- -5.177;2.942;0.150
- -5.897;2.520;0.150
- -5.142;2.766;0.150
- -5.177;2.942;0.150
- -5.177;2.942;0.150
- -5.142;2.766;0.150
- -4.354;2.862;0.150
- -5.177;2.942;0.150
- -4.354;2.862;0.150
- -4.354;3.042;0.150
- -8.466;-2.075;0.150
- -8.466;-0.425;0.150
- -8.546;-1.250;0.150
- -4.354;-5.362;0.150
- -5.177;-5.442;0.150
- -4.354;-5.542;0.150
- -8.466;-0.425;-3.550
- -8.229;0.370;-3.550
- -8.290;-0.460;-3.550
- -8.466;-0.425;-3.550
- -8.290;-0.460;-3.550
- -8.366;-1.250;-3.550
- -8.466;-0.425;-3.550
- -8.366;-1.250;-3.550
- -8.466;-2.075;-3.550
- -8.466;-0.425;-3.550
- -8.466;-2.075;-3.550
- -8.546;-1.250;-3.550
- -4.354;2.862;-3.550
- -5.142;2.766;-3.550
- -5.177;2.942;-3.550
- -5.142;2.766;-3.550
- -5.897;2.520;-3.550
- -5.177;2.942;-3.550
- -5.177;2.942;-3.550
- -5.897;2.520;-3.550
- -5.965;2.687;-3.550
- -5.897;2.520;-3.550
- -6.590;2.135;-3.550
- -5.965;2.687;-3.550
- -5.965;2.687;-3.550
- -6.590;2.135;-3.550
- -6.690;2.284;-3.550
- -6.590;2.135;-3.550
- -7.197;1.623;-3.550
- -6.690;2.284;-3.550
- -6.690;2.284;-3.550
- -7.197;1.623;-3.550
- -7.324;1.750;-3.550
- -7.197;1.623;-3.550
- -7.694;1.004;-3.550
- -7.324;1.750;-3.550
- -7.324;1.750;-3.550
- -7.694;1.004;-3.550
- -7.844;1.104;-3.550
- -7.694;1.004;-3.550
- -8.063;0.301;-3.550
- -7.844;1.104;-3.550
- -7.844;1.104;-3.550
- -8.063;0.301;-3.550
- -8.229;0.370;-3.550
- -8.063;0.301;-3.550
- -8.290;-0.460;-3.550
- -8.229;0.370;-3.550
- -5.142;-5.266;-3.550
- -5.177;-5.442;-3.550
- -5.897;-5.020;-3.550
- -5.177;-5.442;-3.550
- -5.965;-5.187;-3.550
- -5.897;-5.020;-3.550
- -5.897;-5.020;-3.550
- -5.965;-5.187;-3.550
- -6.590;-4.634;-3.550
- -5.965;-5.187;-3.550
- -6.690;-4.784;-3.550
- -6.590;-4.634;-3.550
- -6.590;-4.634;-3.550
- -6.690;-4.784;-3.550
- -7.197;-4.123;-3.550
- -6.690;-4.784;-3.550
- -7.324;-4.250;-3.550
- -7.197;-4.123;-3.550
- -7.197;-4.123;-3.550
- -7.324;-4.250;-3.550
- -7.694;-3.504;-3.550
- -7.324;-4.250;-3.550
- -7.844;-3.604;-3.550
- -7.694;-3.504;-3.550
- -7.694;-3.504;-3.550
- -7.844;-3.604;-3.550
- -8.063;-2.801;-3.550
- -7.844;-3.604;-3.550
- -8.229;-2.870;-3.550
- -8.063;-2.801;-3.550
- -8.063;-2.801;-3.550
- -8.229;-2.870;-3.550
- -8.290;-2.040;-3.550
- -8.229;-2.870;-3.550
- -8.466;-2.075;-3.550
- -8.290;-2.040;-3.550
- -8.290;-2.040;-3.550
- -8.466;-2.075;-3.550
- -8.366;-1.250;-3.550
- -4.354;-5.362;-3.550
- -4.354;-5.542;-3.550
- -5.177;-5.442;-3.550
- -4.354;-5.362;-3.550
- -5.177;-5.442;-3.550
- -5.142;-5.266;-3.550
- -4.354;2.862;-3.550
- -5.177;2.942;-3.550
- -4.354;3.042;-3.550
- -4.354;3.042;-3.550
- -5.177;2.942;-3.550
- -5.177;2.942;0.150
- -4.354;3.042;-3.550
- -5.177;2.942;0.150
- -4.354;3.042;0.150
- -5.177;2.942;-3.550
- -5.965;2.687;-3.550
- -5.965;2.687;0.150
- -5.177;2.942;-3.550
- -5.965;2.687;0.150
- -5.177;2.942;0.150
- -5.965;2.687;-3.550
- -6.690;2.284;-3.550
- -6.690;2.284;0.150
- -5.965;2.687;-3.550
- -6.690;2.284;0.150
- -5.965;2.687;0.150
- -6.690;2.284;-3.550
- -7.324;1.750;-3.550
- -7.324;1.750;0.150
- -6.690;2.284;-3.550
- -7.324;1.750;0.150
- -6.690;2.284;0.150
- -7.324;1.750;-3.550
- -7.844;1.104;-3.550
- -7.844;1.104;0.150
- -7.324;1.750;-3.550
- -7.844;1.104;0.150
- -7.324;1.750;0.150
- -7.844;1.104;-3.550
- -8.229;0.370;-3.550
- -8.229;0.370;0.150
- -7.844;1.104;-3.550
- -8.229;0.370;0.150
- -7.844;1.104;0.150
- -8.229;0.370;-3.550
- -8.466;-0.425;-3.550
- -8.466;-0.425;0.150
- -8.229;0.370;-3.550
- -8.466;-0.425;0.150
- -8.229;0.370;0.150
- -8.466;-0.425;-3.550
- -8.546;-1.250;-3.550
- -8.546;-1.250;0.150
- -8.466;-0.425;-3.550
- -8.546;-1.250;0.150
- -8.466;-0.425;0.150
- -8.546;-1.250;-3.550
- -8.466;-2.075;-3.550
- -8.466;-2.075;0.150
- -8.546;-1.250;-3.550
- -8.466;-2.075;0.150
- -8.546;-1.250;0.150
- -8.466;-2.075;-3.550
- -8.229;-2.870;-3.550
- -8.229;-2.870;0.150
- -8.466;-2.075;-3.550
- -8.229;-2.870;0.150
- -8.466;-2.075;0.150
- -8.229;-2.870;-3.550
- -7.844;-3.604;-3.550
- -7.844;-3.604;0.150
- -8.229;-2.870;-3.550
- -7.844;-3.604;0.150
- -8.229;-2.870;0.150
- -7.844;-3.604;-3.550
- -7.324;-4.250;-3.550
- -7.324;-4.250;0.150
- -7.844;-3.604;-3.550
- -7.324;-4.250;0.150
- -7.844;-3.604;0.150
- -7.324;-4.250;-3.550
- -6.690;-4.784;-3.550
- -6.690;-4.784;0.150
- -7.324;-4.250;-3.550
- -6.690;-4.784;0.150
- -7.324;-4.250;0.150
- -6.690;-4.784;-3.550
- -5.965;-5.187;-3.550
- -5.965;-5.187;0.150
- -6.690;-4.784;-3.550
- -5.965;-5.187;0.150
- -6.690;-4.784;0.150
- -5.965;-5.187;-3.550
- -5.177;-5.442;-3.550
- -5.177;-5.442;0.150
- -5.965;-5.187;-3.550
- -5.177;-5.442;0.150
- -5.965;-5.187;0.150
- -5.177;-5.442;-3.550
- -4.354;-5.542;-3.550
- -4.354;-5.542;0.150
- -5.177;-5.442;-3.550
- -4.354;-5.542;0.150
- -5.177;-5.442;0.150
- -4.354;-5.542;-3.550
- -4.354;-5.362;-3.550
- -4.354;-5.362;0.150
- -4.354;-5.542;-3.550
- -4.354;-5.362;0.150
- -4.354;-5.542;0.150
- -4.354;-5.362;-3.550
- -5.142;-5.266;-3.550
- -5.142;-5.266;0.150
- -4.354;-5.362;-3.550
- -5.142;-5.266;0.150
- -4.354;-5.362;0.150
- -5.142;-5.266;-3.550
- -5.897;-5.020;-3.550
- -5.897;-5.020;0.150
- -5.142;-5.266;-3.550
- -5.897;-5.020;0.150
- -5.142;-5.266;0.150
- -5.897;-5.020;-3.550
- -6.590;-4.634;-3.550
- -6.590;-4.634;0.150
- -5.897;-5.020;-3.550
- -6.590;-4.634;0.150
- -5.897;-5.020;0.150
- -6.590;-4.634;-3.550
- -7.197;-4.123;-3.550
- -7.197;-4.123;0.150
- -6.590;-4.634;-3.550
- -7.197;-4.123;0.150
- -6.590;-4.634;0.150
- -7.197;-4.123;-3.550
- -7.694;-3.504;-3.550
- -7.694;-3.504;0.150
- -7.197;-4.123;-3.550
- -7.694;-3.504;0.150
- -7.197;-4.123;0.150
- -7.694;-3.504;-3.550
- -8.063;-2.801;-3.550
- -8.063;-2.801;0.150
- -7.694;-3.504;-3.550
- -8.063;-2.801;0.150
- -7.694;-3.504;0.150
- -8.063;-2.801;-3.550
- -8.290;-2.040;-3.550
- -8.290;-2.040;0.150
- -8.063;-2.801;-3.550
- -8.290;-2.040;0.150
- -8.063;-2.801;0.150
- -8.290;-2.040;-3.550
- -8.366;-1.250;-3.550
- -8.366;-1.250;0.150
- -8.290;-2.040;-3.550
- -8.366;-1.250;0.150
- -8.290;-2.040;0.150
- -8.366;-1.250;-3.550
- -8.290;-0.460;-3.550
- -8.290;-0.460;0.150
- -8.366;-1.250;-3.550
- -8.290;-0.460;0.150
- -8.366;-1.250;0.150
- -8.290;-0.460;-3.550
- -8.063;0.301;-3.550
- -8.063;0.301;0.150
- -8.290;-0.460;-3.550
- -8.063;0.301;0.150
- -8.290;-0.460;0.150
- -8.063;0.301;-3.550
- -7.694;1.004;-3.550
- -7.694;1.004;0.150
- -8.063;0.301;-3.550
- -7.694;1.004;0.150
- -8.063;0.301;0.150
- -7.694;1.004;-3.550
- -7.197;1.623;-3.550
- -7.197;1.623;0.150
- -7.694;1.004;-3.550
- -7.197;1.623;0.150
- -7.694;1.004;0.150
- -7.197;1.623;-3.550
- -6.590;2.135;-3.550
- -6.590;2.135;0.150
- -7.197;1.623;-3.550
- -6.590;2.135;0.150
- -7.197;1.623;0.150
- -6.590;2.135;-3.550
- -5.897;2.520;-3.550
- -5.897;2.520;0.150
- -6.590;2.135;-3.550
- -5.897;2.520;0.150
- -6.590;2.135;0.150
- -5.897;2.520;-3.550
- -5.142;2.766;-3.550
- -5.142;2.766;0.150
- -5.897;2.520;-3.550
- -5.142;2.766;0.150
- -5.897;2.520;0.150
- -5.142;2.766;-3.550
- -4.354;2.862;-3.550
- -4.354;2.862;0.150
- -5.142;2.766;-3.550
- -4.354;2.862;0.150
- -5.142;2.766;0.150
- -4.354;2.862;-3.550
- -4.354;3.042;-3.550
- -4.354;3.042;0.150
- -4.354;2.862;-3.550
- -4.354;3.042;0.150
- -4.354;2.862;0.150
- """
- let solid2 = """
- 3.997;7.000;3.250
- 3.978;7.096;3.250
- 3.924;7.177;3.250
- 3.997;7.000;3.250
- 3.924;7.177;3.250
- 3.843;7.231;3.250
- 3.997;7.000;3.250
- 3.843;7.231;3.250
- 3.747;7.250;3.250
- 3.997;7.000;3.250
- 3.747;7.250;3.250
- 3.651;7.231;3.250
- 3.997;7.000;3.250
- 3.651;7.231;3.250
- 3.570;7.177;3.250
- 3.997;7.000;3.250
- 3.570;7.177;3.250
- 3.516;7.096;3.250
- 3.997;7.000;3.250
- 3.516;7.096;3.250
- 3.497;7.000;3.250
- 3.997;7.000;3.250
- 3.497;7.000;3.250
- 3.516;6.904;3.250
- 3.997;7.000;3.250
- 3.516;6.904;3.250
- 3.570;6.823;3.250
- 3.997;7.000;3.250
- 3.570;6.823;3.250
- 3.651;6.769;3.250
- 3.997;7.000;3.250
- 3.651;6.769;3.250
- 3.747;6.750;3.250
- 3.997;7.000;3.250
- 3.747;6.750;3.250
- 3.843;6.769;3.250
- 3.997;7.000;3.250
- 3.843;6.769;3.250
- 3.924;6.823;3.250
- 3.997;7.000;3.250
- 3.924;6.823;3.250
- 3.978;6.904;3.250
- 3.997;7.000;-3.550
- 3.978;6.904;-3.550
- 3.924;6.823;-3.550
- 3.997;7.000;-3.550
- 3.924;6.823;-3.550
- 3.843;6.769;-3.550
- 3.997;7.000;-3.550
- 3.843;6.769;-3.550
- 3.747;6.750;-3.550
- 3.997;7.000;-3.550
- 3.747;6.750;-3.550
- 3.651;6.769;-3.550
- 3.997;7.000;-3.550
- 3.651;6.769;-3.550
- 3.570;6.823;-3.550
- 3.997;7.000;-3.550
- 3.570;6.823;-3.550
- 3.516;6.904;-3.550
- 3.997;7.000;-3.550
- 3.516;6.904;-3.550
- 3.497;7.000;-3.550
- 3.997;7.000;-3.550
- 3.497;7.000;-3.550
- 3.516;7.096;-3.550
- 3.997;7.000;-3.550
- 3.516;7.096;-3.550
- 3.570;7.177;-3.550
- 3.997;7.000;-3.550
- 3.570;7.177;-3.550
- 3.651;7.231;-3.550
- 3.997;7.000;-3.550
- 3.651;7.231;-3.550
- 3.747;7.250;-3.550
- 3.997;7.000;-3.550
- 3.747;7.250;-3.550
- 3.843;7.231;-3.550
- 3.997;7.000;-3.550
- 3.843;7.231;-3.550
- 3.924;7.177;-3.550
- 3.997;7.000;-3.550
- 3.924;7.177;-3.550
- 3.978;7.096;-3.550
- 3.997;7.000;-3.550
- 3.978;7.096;-3.550
- 3.978;7.096;3.250
- 3.997;7.000;-3.550
- 3.978;7.096;3.250
- 3.997;7.000;3.250
- 3.978;7.096;-3.550
- 3.924;7.177;-3.550
- 3.924;7.177;3.250
- 3.978;7.096;-3.550
- 3.924;7.177;3.250
- 3.978;7.096;3.250
- 3.924;7.177;-3.550
- 3.843;7.231;-3.550
- 3.843;7.231;3.250
- 3.924;7.177;-3.550
- 3.843;7.231;3.250
- 3.924;7.177;3.250
- 3.843;7.231;-3.550
- 3.747;7.250;-3.550
- 3.747;7.250;3.250
- 3.843;7.231;-3.550
- 3.747;7.250;3.250
- 3.843;7.231;3.250
- 3.747;7.250;-3.550
- 3.651;7.231;-3.550
- 3.651;7.231;3.250
- 3.747;7.250;-3.550
- 3.651;7.231;3.250
- 3.747;7.250;3.250
- 3.651;7.231;-3.550
- 3.570;7.177;-3.550
- 3.570;7.177;3.250
- 3.651;7.231;-3.550
- 3.570;7.177;3.250
- 3.651;7.231;3.250
- 3.570;7.177;-3.550
- 3.516;7.096;-3.550
- 3.516;7.096;3.250
- 3.570;7.177;-3.550
- 3.516;7.096;3.250
- 3.570;7.177;3.250
- 3.516;7.096;-3.550
- 3.497;7.000;-3.550
- 3.497;7.000;3.250
- 3.516;7.096;-3.550
- 3.497;7.000;3.250
- 3.516;7.096;3.250
- 3.497;7.000;-3.550
- 3.516;6.904;-3.550
- 3.516;6.904;3.250
- 3.497;7.000;-3.550
- 3.516;6.904;3.250
- 3.497;7.000;3.250
- 3.516;6.904;-3.550
- 3.570;6.823;-3.550
- 3.570;6.823;3.250
- 3.516;6.904;-3.550
- 3.570;6.823;3.250
- 3.516;6.904;3.250
- 3.570;6.823;-3.550
- 3.651;6.769;-3.550
- 3.651;6.769;3.250
- 3.570;6.823;-3.550
- 3.651;6.769;3.250
- 3.570;6.823;3.250
- 3.651;6.769;-3.550
- 3.747;6.750;-3.550
- 3.747;6.750;3.250
- 3.651;6.769;-3.550
- 3.747;6.750;3.250
- 3.651;6.769;3.250
- 3.747;6.750;-3.550
- 3.843;6.769;-3.550
- 3.843;6.769;3.250
- 3.747;6.750;-3.550
- 3.843;6.769;3.250
- 3.747;6.750;3.250
- 3.843;6.769;-3.550
- 3.924;6.823;-3.550
- 3.924;6.823;3.250
- 3.843;6.769;-3.550
- 3.924;6.823;3.250
- 3.843;6.769;3.250
- 3.924;6.823;-3.550
- 3.978;6.904;-3.550
- 3.978;6.904;3.250
- 3.924;6.823;-3.550
- 3.978;6.904;3.250
- 3.924;6.823;3.250
- 3.978;6.904;-3.550
- 3.997;7.000;-3.550
- 3.997;7.000;3.250
- 3.978;6.904;-3.550
- 3.997;7.000;3.250
- 3.978;6.904;3.250
- """
- struct Point {
- let x: Double
- let y: Double
- let z: Double
- func printPoint() {
- print("new point: \(x) \(y) \(z)")
- }
- }
- func +(lhs: Point, rhs: Point) -> Point {
- return Point(x: lhs.x + rhs.x, y: lhs.y + rhs.y, z: lhs.z + rhs.z)
- }
- func -(lhs: Point, rhs: Point) -> Point {
- return Point(x: lhs.x - rhs.x, y: lhs.y - rhs.y, z: lhs.z - rhs.z)
- }
- func *(lhs: Point, rhs: Double) -> Point {
- return Point(x: lhs.x * rhs, y: lhs.y * rhs, z: lhs.z * rhs)
- }
- func *(lhs: Double, rhs: Point) -> Point {
- return Point(x: rhs.x * lhs, y: rhs.y * lhs, z: rhs.z * lhs)
- }
- func dot(_ u: Point, _ v: Point) -> Double {
- return u.x * v.x + u.y * v.y + u.z * v.z
- }
- func norm(_ v: Point) -> Double {
- return dot(v,v).squareRoot()
- }
- func d(_ u: Point,_ v: Point) -> Double {
- return norm(u-v)
- }
- struct Face {
- var v1: Point
- var v2: Point
- var v3: Point
- func printFace() {
- print("Face: \(v1.printPoint()) \(v2.printPoint()) \(v3.printPoint())")
- }
- }
- struct Edge {
- let p1: Point
- let p2: Point
- }
- struct Solid {
- let size: Int
- var faces: [Face]
- }
- struct AxisAlignedBoundingBox {
- let minX: Double
- let minY: Double
- let minZ: Double
- let maxX: Double
- let maxY: Double
- let maxZ: Double
- }
- struct Plane {
- let point: Point
- let normal: Double
- }
- extension Double {
- func toSecondPower() -> Double {
- return self * self
- }
- }
- // MARK:- Points
- func distance(between firstPoint: Point, and secondPoint: Point) -> Double {
- let x = (secondPoint.x - firstPoint.x).toSecondPower()
- let y = (secondPoint.y - firstPoint.y).toSecondPower()
- let z = (secondPoint.z - firstPoint.z).toSecondPower()
- return (x + y + z).squareRoot()
- }
- let p1 = Point(x: 0.0, y: 0.0, z: 0.0)
- let p2 = Point(x: 1.0, y: 2.0, z: 3.0)
- let testDistance = distance(between: p1, and: p2)
- // MARK:- Edge and Point
- func distance(between edge: Edge, and point: Point) -> Double {
- let v = edge.p2 - edge.p1
- let w = point - edge.p1
- let c1 = dot(w,v)
- let c2 = dot(v,v)
- let b = c1 / c2
- let pointB = edge.p1 + b*v
- return d(point,pointB)
- }
- let edge = Edge(p1: p1, p2: p2)
- let point = Point(x: 4.0, y: 5.0, z: 6.0)
- let pointToEdgeDistance = distance(between: edge, and: point)
- // MARK:- Edges
- func distance(between firstEdge: Edge, and secondEdge: Edge) -> Double {
- let smallNumber = 0.000000000001
- let u = firstEdge.p2 - firstEdge.p1
- let v = secondEdge.p2 - secondEdge.p1
- let w = firstEdge.p1 - secondEdge.p1
- let a = dot(u,u)
- let b = dot(u,v)
- let c = dot(v,v)
- let d = dot(u,w)
- let e = dot(v,w)
- let D = a*c - b*b
- var sc = 0.0
- var tc = 0.0
- if D < smallNumber {
- sc = 0.0
- tc = b>c ? d/b : e/c
- } else {
- sc = (b*e - c*d) / D
- tc = (a*e - b*d) / D
- }
- let dP = w + (sc * u) - (tc*v)
- return norm(dP)
- }
- 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))
- let distanceBetweenTwoEdges = distance(between: edge, and: otherEdge)
- // MARK:- Face and Point
- func distance(between face: Face, and point: Point) -> Double {
- let distanceV1 = distance(between: face.v1, and: point)
- let distanceV2 = distance(between: face.v2, and: point)
- let distanceV3 = distance(between: face.v3, and: point)
- return [distanceV1, distanceV2, distanceV3].min()!
- }
- func generatePlane(for face: Face) -> Plane {
- return Plane(point: <#T##Point#>, normal: <#T##Double#>)
- }
- func distance2(between face: Face, and point: Point) -> Double {
- }
- 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))
- distance(between: face, and: point)
- // MARK:- Edge and Face
- func distance(between edge: Edge, and face: Face) -> Double {
- let distanceP1 = distance(between: face, and: edge.p1)
- let distanceP2 = distance(between: face, and: edge.p2)
- return [distanceP1,distanceP2].min()!
- }
- distance(between: edge, and: face)
- // MARK:- Faces
- func distance(between firstFace: Face, and secondFace: Face) -> Double {
- let d1 = distance(between: firstFace.v1, and: secondFace.v1)
- let d2 = distance(between: firstFace.v1, and: secondFace.v2)
- let d3 = distance(between: firstFace.v1, and: secondFace.v3)
- let d4 = distance(between: firstFace.v2, and: secondFace.v1)
- let d5 = distance(between: firstFace.v2, and: secondFace.v2)
- let d6 = distance(between: firstFace.v2, and: secondFace.v3)
- let d7 = distance(between: firstFace.v3, and: secondFace.v1)
- let d8 = distance(between: firstFace.v3, and: secondFace.v1)
- let d9 = distance(between: firstFace.v3, and: secondFace.v1)
- return [d1,d2,d3,d4,d5,d6,d7,d8,d9].min()!
- }
- // MARK:- Solids
- func distance(between firstSolid: Solid, and secondSolid: Solid) -> Double {
- var result = Double.greatestFiniteMagnitude
- for firstSolidFace in firstSolid.faces {
- for secondSolidFace in secondSolid.faces {
- let distanceBetweenFaces = distance(between: firstSolidFace, and: secondSolidFace)
- if distanceBetweenFaces == 0.0 {
- firstSolidFace.printFace()
- print("second")
- secondSolidFace.printFace()
- }
- if result > distanceBetweenFaces {
- result = distanceBetweenFaces
- }
- }
- }
- return result
- }
- // MARK:- AABB
- func getAABB(from solid: Solid) -> AxisAlignedBoundingBox {
- let max = Double.greatestFiniteMagnitude
- var minX = max
- var minY = max
- var minZ = max
- var maxX = -max
- var maxY = -max
- var maxZ = -max
- for face in solid.faces {
- for point in [face.v1,face.v2,face.v3] {
- if point.x > maxX { maxX = point.x }
- if point.x < minX { minX = point.x }
- if point.y > maxY { maxY = point.y }
- if point.y < minY { minY = point.y }
- if point.z > maxZ { maxZ = point.z }
- if point.z < minZ { minZ = point.z }
- }
- }
- print("minX: \(minX), minY: \(minY), minZ: \(minZ), maxX: \(maxX), maxY: \(maxY), maxZ: \(maxZ)")
- return AxisAlignedBoundingBox(minX: minX, minY: minY, minZ: minZ, maxX: maxX, maxY: maxY, maxZ: maxZ)
- }
- // MARK:- Read input
- func readSolid(_ solidString: String) -> Solid {
- var resultSolid = Solid(size: 0, faces: [Face]())
- let facesStrings = solidString.components(separatedBy: "\n\n")
- for faceString in facesStrings {
- let pointsStrings = faceString.components(separatedBy: "\n")
- let xyzV1 = pointsStrings[0].components(separatedBy: ";")
- let v1 = Point(x: Double(xyzV1[0])!, y: Double(xyzV1[1])!, z: Double(xyzV1[2])!)
- let xyzV2 = pointsStrings[1].components(separatedBy: ";")
- let v2 = Point(x: Double(xyzV1[0])!, y: Double(xyzV1[1])!, z: Double(xyzV1[2])!)
- let xyzV3 = pointsStrings[2].components(separatedBy: ";")
- let v3 = Point(x: Double(xyzV1[0])!, y: Double(xyzV1[1])!, z: Double(xyzV1[2])!)
- let newFace = Face(v1: v1, v2: v2, v3: v3)
- resultSolid.faces.append(newFace)
- }
- return resultSolid
- }
- let inputSolid1 = readSolid(solid1)
- let inputSolid2 = readSolid(solid2)
- getAABB(from: inputSolid1)
- getAABB(from: inputSolid2)
- let distanceBetweenSolids = distance(between: inputSolid1, and: inputSolid2)
- print(distanceBetweenSolids)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement