public void ifDistanceIsVerticalOrHorizontal() { Assert.AreEqual <double>(0.5, CoordinateCalculator.getScale(new Point(0, 0), new Point(1, 0), 2), "The scale of 1/2 is correctely calculated"); Assert.AreEqual <double>(0.5, CoordinateCalculator.getScale(new Point(0, 0), new Point(0, 1), 2), "The scale of 1/2 is correctely calculated"); }
public void ifLengthIsZeroThenScaleIsZero() { Assert.AreEqual <double>(0, CoordinateCalculator.getScale(new Point(0, 0), new Point(0, 0), 0), "The scale of zero is correctely calculated"); Assert.AreEqual <double>(0, CoordinateCalculator.getScale(new Point((float)3.25, (float)6.6666), new Point((float)8.99, (float)0.0005), 0), "The scale of zero is correctely calculated"); }
private void DrawPosition(CoordinateCalculator corCalc, Graphics g) { var point = _db.GetPosition(); var projectd = corCalc.MapPoint(new PointF(Decimal.ToSingle(point.lng), Decimal.ToSingle(point.lat))); g.DrawLine(new Pen(Color.Red, 2), projectd.X - 6, projectd.Y, projectd.X + 6, projectd.Y); g.DrawLine(new Pen(Color.Red, 2), projectd.X, projectd.Y - 6, projectd.X, projectd.Y + 6); }
public void ifStartEndPointSameThenScaleIsZero() { Assert.AreEqual <double>(0, CoordinateCalculator.getScale(new Point(0, 0), new Point(0, 0), 20), "The scale of zero is correctely calculated"); Assert.AreEqual <double>(0, CoordinateCalculator.getScale(new Point((float)5.14, (float)3.11), new Point((float)5.14, (float)3.11), 11.3), "The scale of zero is correctely calculated"); }
// Use this for initialization void Start() { var sats = ParserTLE.ParseString("\r\nISS (ZARYA) \r\n1 25544U 98067A 17258.66207433 .00002352 00000-0 42668-4 0 9996\r\n2 25544 51.6434 307.2969 0003696 276.6985 227.2383 15.54196035 75826\r\nTIANGONG 1 \r\n1 37820U 11053A 17259.54739255 .00058138 00000-0 24196-3 0 9994\r\n2 37820 42.7575 358.5910 0019922 5.9603 111.3279 15.84538366342438\r\nAGGIESAT 4 \r\n1 41313U 98067HP 17258.44077356 .00042699 00000-0 23727-3 0 9995\r\n2 41313 51.6381 257.8890 0003807 101.2846 258.8583 15.79044504 93164\r\nNODES 2 \r\n1 41477U 98067HX 17259.43685587 .01745891 31111-2 98571-3 0 9990\r\n2 41477 51.6165 242.2525 0002417 106.9606 253.1612 16.19290091 76600\r\nNODES 1 \r\n1 41478U 98067HY 17259.49295397 .00956277 55723-3 88097-3 0 9992\r\n2 41478 51.6183 243.4798 0003195 83.8364 276.3014 16.11800501 76590\r\nFLOCK 2E'-1 \r\n1 41479U 98067HZ 17259.06212448 .00036116 00000-0 25835-3 0 9999\r\n2 41479 51.6325 271.8323 0001157 14.1796 345.9235 15.73367650 76149\r\nFLOCK 2E'-3 \r\n1 41480U 98067JA 17259.41704939 .00041384 00000-0 30035-3 0 9992\r\n2 41480 51.6319 269.7242 0001960 26.2589 333.8509 15.72961681 76194\r\nFLOCK 2E'-2 \r\n1 41481U 98067JB 17259.44288770 .00042712 00000-0 29463-3 0 9995\r\n2 41481 51.6292 267.5779 0001158 63.8590 296.2528 15.74136671 76215\r\nFLOCK 2E'-4 \r\n1 41482U 98067JC 17259.38931460 .00076989 00000-0 44667-3 0 9996\r\n2 41482 51.6277 264.9284 0002851 67.6433 292.4869 15.77841040 76245\r\nFLOCK 2E-1 \r\n1 41483U 98067JD 17259.50885083 .00030602 00000-0 24000-3 0 9991\r\n2 41483 51.6344 271.1522 0003148 37.6267 322.4951 15.71273051 76047\r\nFLOCK 2E-2 \r\n1 41484U 98067JE 17259.39625517 .00039471 00000-0 27973-3 0 9998\r\n2 41484 51.6357 268.9149 0003418 46.8803 313.2481 15.73538606 76069\r\nFLOCK 2E-3 \r\n1 41486U 98067JG 17259.45362261 .00051238 00000-0 37975-3 0 9999\r\n2 41486 51.6336 273.0184 0003477 56.9950 303.1382 15.72368497 76037\r\nFLOCK 2E-4 \r\n1 41487U 98067JH 17259.43293316 .00030506 00000-0 23819-3 0 9999\r\n2 41487 51.6342 271.3578 0003948 69.1291 291.0130 15.71377561 76059\r\nFLOCK 2E-6 \r\n1 41563U 98067JM 17258.43992194 .00023410 00000-0 20044-3 0 9996\r\n2 41563 51.6342 279.7291 0000366 85.9717 274.1322 15.69317603 73924\r\nFLOCK 2E-5 \r\n1 41564U 98067JN 17259.41065253 .00027179 00000-0 23156-3 0 9996\r\n2 41564 51.6340 274.9725 0000592 48.0856 312.0191 15.69344774 74068\r\nFLOCK 2E-7 \r\n1 41565U 98067JP 17259.45896539 .00041995 00000-0 29451-3 0 9996\r\n2 41565 51.6335 268.4794 0004240 82.7120 277.4360 15.73751132 74056\r\nFLOCK 2E'-5 \r\n1 41567U 98067JR 17259.07438845 .00021444 00000-0 19137-3 0 9995\r\n2 41567 51.6354 278.7541 0004069 100.7144 259.4311 15.68359203 73859\r\nFLOCK 2E'-6 \r\n1 41568U 98067JS 17259.50910311 .00030945 00000-0 24824-3 0 9992\r\n2 41568 51.6336 272.5913 0003732 93.6391 266.5033 15.70722225 74004\r\nFLOCK 2E'-8 \r\n1 41569U 98067JT 17259.41142022 .00045954 00000-0 31736-3 0 9995\r\n2 41569 51.6317 268.1595 0002986 51.4134 308.7132 15.74073710 73930\r\nFLOCK 2E'-7 \r\n1 41570U 98067JU 17259.15190581 .00326900 00000-0 11184-2 0 9998\r\n2 41570 51.6332 263.3951 0006109 65.6729 294.4913 15.88285199 73995\r\nFLOCK 2E-9 \r\n1 41571U 98067JV 17259.10493146 .00049135 00000-0 32274-3 0 9993\r\n2 41571 51.6338 268.3764 0003513 76.6090 283.5301 15.75202360 73881\r\nFLOCK 2E-10 \r\n1 41572U 98067JW 17259.43790460 .00040058 00000-0 29117-3 0 9996\r\n2 41572 51.6332 269.8731 0004295 86.0198 274.1292 15.72933573 73898\r\nFLOCK 2E-12 \r\n1 41573U 98067JX 17259.44634512 .00045252 00000-0 30943-3 0 9993\r\n2 41573 51.6318 268.4001 0003562 89.2684 270.8723 15.74308568 73916\r\nFLOCK 2E-11 \r\n1 41574U 98067JY 17259.43303495 .00045358 00000-0 30983-3 0 9997\r\n2 41574 51.6309 267.5048 0004012 97.0920 263.0536 15.74330073 73922\r\nFLOCK 2E'-9 \r\n1 41575U 98067JZ 17259.42109348 .00051747 00000-0 32968-3 0 9992\r\n2 41575 51.6310 265.8894 0003384 102.4574 257.6804 15.75881081 73931\r\nFLOCK 2E'-10 \r\n1 41576U 98067KA 17259.04663571 .00042982 00000-0 28831-3 0 9999\r\n2 41576 51.6339 270.2669 0003738 104.6053 255.5361 15.74776751 73742\r\nFLOCK 2E'-11 \r\n1 41577U 98067KB 17259.43910863 .00042291 00000-0 30015-3 0 9992\r\n2 41577 51.6337 269.1541 0004120 90.8730 269.2741 15.73469385 73612\r\nFLOCK 2E'-12 \r\n1 41578U 98067KC 17259.40893504 .00050874 00000-0 32560-3 0 9995\r\n2 41578 51.6308 267.3432 0004939 80.8682 279.2876 15.75775858 73632\r\nFLOCK 2E'-13 \r\n1 41761U 98067KH 17259.09030231 .00016650 00000-0 18762-3 0 9996\r\n2 41761 51.6371 292.4464 0005059 248.1918 111.8538 15.62666949 57112\r\nFLOCK 2E'-14 \r\n1 41762U 98067KJ 17259.44658629 .00019477 00000-0 21522-3 0 9991\r\n2 41762 51.6383 290.3594 0004825 252.0732 107.9737 15.63046543 57171\r\nFLOCK 2E'-16 \r\n1 41763U 98067KK 17259.45272653 .00021392 00000-0 23075-3 0 9996\r\n2 41763 51.6387 289.6477 0004402 268.1222 91.9268 15.63598994 57140\r\nFLOCK 2E'-15 \r\n1 41764U 98067KL 17259.49110669 .00016312 00000-0 18459-3 0 9995\r\n2 41764 51.6382 290.6515 0004814 259.2917 100.7535 15.62576791 57135\r\nTIANGONG-2 \r\n1 41765U 16057A 17259.19774463 .00001950 00000-0 29267-4 0 9992\r\n2 41765 42.7843 174.3143 0002085 188.1494 334.0354 15.58804008 57188\r\nFLOCK 2E'-18 \r\n1 41769U 98067KM 17259.15433421 .00017075 00000-0 19269-3 0 9994\r\n2 41769 51.6381 292.1460 0004198 287.2844 72.7691 15.62611238 57081\r\nFLOCK 2E'-17 \r\n1 41776U 98067KN 17259.46199287 .00018562 00000-0 20783-3 0 9990\r\n2 41776 51.6391 290.4765 0004585 289.0414 71.0083 15.62744945 57126\r\nFLOCK 2E'-19 \r\n1 41777U 98067KP 17259.15914849 .00031129 00000-0 30210-3 0 9996\r\n2 41777 51.6365 287.6394 0003455 295.9144 64.1496 15.66048367 57091\r\nFLOCK 2E'-20 \r\n1 41782U 98067KQ 17259.52525685 .00020402 00000-0 20762-3 0 9992\r\n2 41782 51.6376 287.1235 0003486 294.4833 65.5799 15.65119517 57008\r\nBANXING-2 \r\n1 41834U 16057H 17258.81249130 .00016251 00000-0 13492-3 0 9997\r\n2 41834 42.7820 163.4597 0007059 175.3284 251.9219 15.69886081 51345\r\nSTARS-C \r\n1 41895U 98067KR 17259.14493371 .00052131 00000-0 47582-3 0 9994\r\n2 41895 51.6363 293.5585 0004399 338.6484 21.4328 15.67326335 42222\r\nTANCREDO-1 \r\n1 41931U 98067KT 17259.09152068 .00213113 00000-0 97356-3 0 9997\r\n2 41931 51.6301 284.8534 0004539 2.9311 357.1718 15.82593573 37906\r\nITF-2 \r\n1 41932U 98067KU 17259.47249932 .00027256 00000-0 31060-3 0 9998\r\n2 41932 51.6400 295.7996 0003670 265.3256 94.7319 15.62032672 37792\r\nWASEDA-SAT3 \r\n1 41933U 98067KV 17259.15088613 .00027914 00000-0 30592-3 0 9991\r\n2 41933 51.6381 296.6211 0003516 270.1141 89.9451 15.63026120 37758\r\nAOBA-VELOX 3 \r\n1 41935U 98067KX 17259.30940959 .00032111 00000-0 35586-3 0 9993\r\n2 41935 51.6395 296.2020 0003199 273.7883 86.2745 15.62663435 37872\r\nOSNSAT \r\n1 41939U 98067KZ 17259.12189876 .00067811 00000-0 54141-3 0 9993\r\n2 41939 51.6352 291.1399 0003401 301.8086 58.2580 15.70481073 37170\r\nLEMUR-2-REDFERN-GOES \r\n1 42059U 98067LA 17259.46699910 .00028201 00000-0 33476-3 0 9997\r\n2 42059 51.6383 297.9859 0006671 290.4189 69.6088 15.60934475 30251\r\nLEMUR-2-TRUTNA \r\n1 42067U 98067LC 17259.19357411 .00048382 00000-0 47099-3 0 9991\r\n2 42067 51.6377 296.9002 0005487 302.2625 57.7838 15.65749823 30070\r\nLEMUR-2-AUSTINTACIOUS \r\n1 42068U 98067LD 17259.49151412 .00034259 00000-0 38658-3 0 9997\r\n2 42068 51.6386 297.3993 0006194 291.2578 68.7755 15.62150016 30195\r\nLEMUR-2-TRUTNAHD \r\n1 42069U 98067LE 17259.51233356 .00025476 00000-0 29771-3 0 9996\r\n2 42069 51.6394 297.5521 0005883 291.6169 68.4198 15.61408730 30240\r\nISS DEB \r\n1 42434U 98067LF 17259.46956901 .00227412 00000-0 13365-2 0 9999\r\n2 42434 51.6309 291.9363 0004754 3.7821 356.3214 15.77018387 26488\r\nTIANZHOU 1 \r\n1 42684U 17021A 17258.52795139 .00003636 00000-0 50476-4 0 9993\r\n2 42684 42.7842 178.2941 0001650 185.6588 173.2777 15.58806357 57079\r\nISS DEB \r\n1 42697U 98067LG 17259.14043462 .00188209 00000-0 14041-2 0 9996\r\n2 42697 51.6331 298.7694 0006241 353.5693 6.5224 15.71605930 20885\r\nHAVELSAT \r\n1 42700U 98067LH 17259.41627837 .00024834 00000-0 32482-3 0 9998\r\n2 42700 51.6395 301.3980 0006277 318.2733 41.7780 15.58453362 19152\r\nSOMP 2 \r\n1 42701U 98067LJ 17259.49209313 .00020141 00000-0 26796-3 0 9990\r\n2 42701 51.6394 301.1584 0006165 318.6081 41.4443 15.58139697 19151\r\nCOLUMBIA \r\n1 42702U 98067LK 17259.37623948 .00062670 00000-0 70270-3 0 9991\r\n2 42702 51.6386 300.3788 0006488 325.9005 34.1571 15.62040602 19080\r\nSGSAT \r\n1 42703U 98067LL 17259.22710250 .00048423 00000-0 57533-3 0 9996\r\n2 42703 51.6380 301.6300 0001868 318.1448 41.9402 15.60666337 19043\r\nCXBN-2 \r\n1 42704U 98067LM 17259.17872088 .00025021 00000-0 33128-3 0 9992\r\n2 42704 51.6399 302.8134 0001296 295.2251 64.8607 15.58140052 19032\r\nICECUBE \r\n1 42705U 98067LN 17259.41677008 .00033973 00000-0 43289-3 0 9999\r\n2 42705 51.6406 301.4123 0001155 293.6815 66.4057 15.58991246 19134\r\nPHOENIX \r\n1 42706U 98067LP 17259.16649725 .00024047 00000-0 31692-3 0 9994\r\n2 42706 51.6395 302.7348 0001522 330.7490 29.3417 15.58286796 19028\r\nX-CUBESAT \r\n1 42707U 98067LQ 17259.35878552 .00026496 00000-0 34754-3 0 9990\r\n2 42707 51.6386 301.7647 0001666 334.8956 25.1956 15.58355264 19042\r\nQBEE50-LTU-OC \r\n1 42708U 98067LR 17259.49036095 .00024961 00000-0 32874-3 0 9990\r\n2 42708 51.6387 301.1440 0001674 333.9112 26.1796 15.58282225 19029\r\nALTAIR PATHFINDER \r\n1 42711U 98067LS 17259.41972892 .00016506 00000-0 23066-3 0 9999\r\n2 42711 51.6397 302.1684 0003312 247.0824 112.9818 15.56983828 18710\r\nSHARC \r\n1 42712U 98067LT 17259.42037427 .00011592 00000-0 16514-3 0 9997\r\n2 42712 51.6403 302.1788 0001446 257.8173 102.2657 15.56813986 18952\r\nZA-AEROSAT \r\n1 42713U 98067LU 17259.45357709 .00020564 00000-0 27898-3 0 9995\r\n2 42713 51.6396 301.6485 0001186 258.8452 101.2406 15.57615670 18721\r\nLINK \r\n1 42714U 98067LV 17259.36689045 .00033552 00000-0 43193-3 0 9994\r\n2 42714 51.6390 301.8149 0001237 294.9290 65.1574 15.58724945 18825\r\nCSUNSAT 1 \r\n1 42715U 98067LW 17259.39537897 .00024281 00000-0 32720-3 0 9998\r\n2 42715 51.6395 302.0062 0003097 238.5585 121.5105 15.57683701 18713\r\nUPSAT \r\n1 42716U 98067LX 17258.38995576 .00026403 00000-0 34208-3 0 9990\r\n2 42716 51.6397 306.5451 0004826 322.0418 38.0234 15.58676454 18692\r\nSPACECUBE \r\n1 42717U 98067LY 17259.37222561 .00026264 00000-0 34736-3 0 9999\r\n2 42717 51.6395 301.8547 0004719 324.3730 35.6947 15.58131588 18089\r\nHOOPOE \r\n1 42718U 98067LZ 17259.49016339 .00026446 00000-0 34547-3 0 9999\r\n2 42718 51.6391 301.1443 0004740 325.2876 34.7807 15.58456701 18104\r\nCHALLENGER \r\n1 42721U 98067MA 17259.48804548 .00033088 00000-0 41903-3 0 9993\r\n2 42721 51.6384 301.1228 0007010 301.8179 58.2131 15.59143886 17805\r\nNJUST-1 \r\n1 42722U 98067MB 17259.47687756 .00020836 00000-0 28506-3 0 9994\r\n2 42722 51.6394 301.8008 0007004 297.0393 62.9883 15.57359143 17794\r\nUNSW-ECO \r\n1 42723U 98067MC 17259.38948863 .00030009 00000-0 39459-3 0 9996\r\n2 42723 51.6398 301.9707 0006866 299.0031 61.0273 15.58197404 17763\r\nDUTHSAT \r\n1 42724U 98067MD 17259.49815121 .00035472 00000-0 45198-3 0 9995\r\n2 42724 51.6397 301.1938 0006266 306.8742 53.1676 15.58951915 17709\r\nLILACSAT-1 \r\n1 42725U 98067ME 17259.34875902 .00025468 00000-0 34446-3 0 9991\r\n2 42725 51.6395 302.4481 0006103 302.5571 57.4831 15.57542575 17671\r\nNSIGHT-1 \r\n1 42726U 98067MF 17259.38096860 .00012948 00000-0 18639-3 0 9999\r\n2 42726 51.6404 302.6638 0006133 300.1057 59.9327 15.56397128 17684\r\nSNUSAT-1 \r\n1 42727U 98067MG 17259.47493448 .00024118 00000-0 32586-3 0 9992\r\n2 42727 51.6385 301.7829 0006559 259.2313 100.7941 15.57600256 17661\r\nQBITO \r\n1 42728U 98067MH 17259.33138590 .00027723 00000-0 36880-3 0 9998\r\n2 42728 51.6405 302.3362 0003784 319.1870 40.8838 15.57947731 17486\r\nAALTO-2 \r\n1 42729U 98067MJ 17259.39536704 .00027499 00000-0 36592-3 0 9994\r\n2 42729 51.6397 302.0098 0003786 319.7157 40.3554 15.57945079 17502\r\nSUSAT \r\n1 42730U 98067MK 17259.33635476 .00025528 00000-0 34234-3 0 9998\r\n2 42730 51.6395 302.3641 0003771 316.6379 43.4316 15.57780521 17481\r\nI-INSPIRE II \r\n1 42731U 98067ML 17259.38508736 .00031598 00000-0 41217-3 0 9995\r\n2 42731 51.6384 301.9313 0005548 245.5702 114.4712 15.58392180 17542\r\nPOLYITAN-2-SAU \r\n1 42732U 98067MM 17259.13567635 .00024089 00000-0 32051-3 0 9995\r\n2 42732 51.6389 303.2648 0005856 242.1051 117.9348 15.58017456 17505\r\nSNUSAT-1B \r\n1 42733U 98067MN 17259.40089780 .00025531 00000-0 34167-3 0 9999\r\n2 42733 51.6389 302.0380 0005756 245.1571 114.8823 15.57827052 17543\r\nEXALTA-1 \r\n1 42734U 98067MP 17259.51389149 .00025744 00000-0 33799-3 0 9990\r\n2 42734 51.6386 301.2940 0007665 272.2930 87.7185 15.58320609 17518\r\nAOXIANG-1 \r\n1 42735U 98067MQ 17259.47394435 .00021264 00000-0 28992-3 0 9992\r\n2 42735 51.6392 301.7801 0007560 293.0405 66.9789 15.57433101 18925\r\nBEEAGLESAT \r\n1 42736U 98067MR 17259.53505380 .00021332 00000-0 28905-3 0 9993\r\n2 42736 51.6391 301.4396 0007464 293.5191 66.5016 15.57598427 17629\r\nATLANTIS \r\n1 42737U 98067MS 17258.54712554 .00051386 00000-0 60636-3 0 9996\r\n2 42737 51.6377 305.3338 0007188 298.6894 61.3377 15.60793860 17379\r\nPROGRESS-MS 06 \r\n1 42756U 17033A 17258.52642144 .00002378 00000-0 43064-4 0 9990\r\n2 42756 51.6436 307.9738 0003676 275.6412 188.8006 15.54195380 14497\r\nISS DEB (ROSA) \r\n1 42813U 98067MT 17258.59735590 .00053313 00000-0 66394-3 0 9990\r\n2 42813 51.6389 306.4234 0003623 299.4705 60.5926 15.59385582 12769\r\nSOYUZ-MS 05 \r\n1 42898U 17043A 17258.52642144 .00002378 00000-0 43064-4 0 9998\r\n2 42898 51.6436 307.9738 0003676 275.6412 188.8006 15.54195380 7609\r\nDRAGON CRS-12 \r\n1 42904U 17045A 17258.52642144 .00002378 00000-0 43064-4 0 9998\r\n2 42904 51.6436 307.9738 0003676 275.6412 188.8006 15.54195380 4952\r\nSOYUZ-MS 06 \r\n1 42937U 17054A 17258.52642144 .00002378 00000-0 43064-4 0 9994\r\n2 42937 51.6436 307.9738 0003676 275.6412 188.8006 15.54195380 75800") //.Take(10) .Select(s => this.InstantiateSatalite(s)) .ToList(); this.DrawnSatalites.AddRange(sats); this.Calculator = new CoordinateCalculator(51.9839248, 5.9107478, 20, DateTime.UtcNow.AddDays(0.6)); }
public void DrawLocation(Graphics g, CoordinateCalculator cCalc) { Sgp4Data position = SatFunctions.getSatPositionAtTime(Tle, new EpochTime(TimeKeeper.Now()), Sgp4.wgsConstant.WGS_84); var point = SatFunctions.calcSatSubPoint(new EpochTime(TimeKeeper.Now()), position, Sgp4.wgsConstant.WGS_84); var mappedPoint = cCalc.MapPoint(new PointF((float)point.getLongitude(), (float)point.getLatitude())); mappedPoint = new PointF((float)Math.Round(mappedPoint.X), (float)Math.Round(mappedPoint.Y)); g.DrawImage(Properties.Resources.satellite, mappedPoint.X - 25, mappedPoint.Y - 25, 50, 50); var font = new Font("Times New Roman", 18, FontStyle.Bold, GraphicsUnit.Pixel); g.DrawString(Name, font, new SolidBrush(Color.OrangeRed), mappedPoint.X, mappedPoint.Y + 15); }
private void DrawGrid(CoordinateCalculator corCalc, Graphics g) { var fontSize = (float)Math.Round(0.013888888888889 * _panel.Width + 5); var font = new Font("Times New Roman", fontSize, FontStyle.Bold, GraphicsUnit.Pixel); for (var i = 60; i >= -60; i -= 30) { var start = corCalc.MapPoint(new PointF(-180, i)); var end = corCalc.MapPoint(new PointF(180, i)); g.DrawString($"{i}°", font, new SolidBrush(Color.White), start); g.DrawLine(new Pen(Color.LightGray, 1), start, end); } for (var i = -180; i <= 180; i += 30) { var start = corCalc.MapPoint(new PointF(i, 90)); var end = corCalc.MapPoint(new PointF(i, -90)); g.DrawString($"{i}°", font, new SolidBrush(Color.White), new PointF(start.X, start.Y + 20)); g.DrawLine(new Pen(Color.LightGray, 1), start, end); } }
private void Redraw(object sender, EventArgs e) { var graphics = _graphicsBuffer.Graphics; graphics.Clear(Color.White); graphics.DrawImage(Properties.Resources.world, 0, 0, _panel.Width + 1, _panel.Height + 1); var corCalc = new CoordinateCalculator(_panel.Size); DrawGrid(corCalc, graphics); DrawPosition(corCalc, graphics); if (_satellites.MainSatellite != null) { _satellites.MainSatellite.DrawLine(graphics, corCalc); } foreach (var satellite in _satellites.SelectedSatellites) { satellite.DrawLocation(graphics, corCalc); } _graphicsBuffer.Render(_panelGraphics); }
private void DrawLineSet(EpochTime startTime, List <One_Sgp4.Sgp4Data> data, Color c, CoordinateCalculator cCalc, Graphics g) { foreach (var point in data) { startTime.addMinutes(0.01); var position = SatFunctions.calcSatSubPoint(startTime, point, Sgp4.wgsConstant.WGS_84); var pointOverGround = cCalc.MapPoint(new PointF((float)position.getLongitude(), (float)position.getLatitude())); g.FillRectangle(new SolidBrush(c), new RectangleF(pointOverGround, new Size(1, 1))); } }
// Use this for initialization void Start() { this.Calculator = GameObject.Find("Main Camera").GetComponent <GameManager>().Calculator; }
public void DrawLine(Graphics g, CoordinateCalculator cCalc) { DrawLineSet(new EpochTime(TimeKeeper.Now().AddMinutes(-30)), CalculatePositionList(-30, 0), Color.Red, cCalc, g); DrawLineSet(new EpochTime(TimeKeeper.Now()), CalculatePositionList(0, 90), Color.Yellow, cCalc, g); }
public void testScaleCalculation() { Assert.AreEqual <double>(2.5, CoordinateCalculator.getScale(new Point(0, 0), new Point(3, 4), 2), "The scale of 5/2 is correctely calculated"); }
static void Main(string[] args) { Grid Playfield = new Grid(); AIModule enemyAI = new AIModule(); logger = new Logger(); string coordinate; int aiX, aiY; Console.WriteLine("-----"); Console.WriteLine("Greetings, commander! Welcome to the next iteration of Battleship board game implementation."); Console.WriteLine("Write a letter and a digit to shoot to a field! For example: A5"); while (!isOver) { while (!isOver) { coordinate = Console.ReadLine(); try { if (Playfield.EnemyMap[CoordinateCalculator.GetX(coordinate), CoordinateCalculator.GetY(coordinate)].State == State.basic) { if (Playfield.EnemyMap[CoordinateCalculator.GetX(coordinate), CoordinateCalculator.GetY(coordinate)].Shoot()) { logger.AppendLog("You hit the enemy ship!"); } else { logger.AppendLog("Miss..."); } logger.DumpLog(); break; } Console.WriteLine("You already shot there! Try again."); } catch (IndexOutOfRangeException) { Console.WriteLine("You shot outside of the map area. The sea is not quite impressed."); break; } } while (!isOver) { aiX = enemyAI.Aim(); aiY = enemyAI.Aim(); if (Playfield.PlayerMap[aiX, aiY].State == State.basic) { if (Playfield.PlayerMap[aiX, aiY].Shoot()) { logger.AppendLog("Enemy hit one of your ships!"); } else { logger.AppendLog("Enemy missed the shot."); } logger.DumpLog(); break; } } Console.ReadKey(); if (!isOver) { Playfield.DrawGrid(); } } }
public void testDistanceCalculation() { Assert.AreEqual <double>(5, CoordinateCalculator.euclideanDistance(new Point(1, 2), new Point(4, 6)), "the distance of 5 between points (1,2), and (4,6) is calculated correctely"); }
// Use this for initialization void Start() { this.Calculator = GameObject.Find("Main Camera").GetComponent <GameManager>().Calculator; this.LineRenderer = this.gameObject.GetComponent <LineRenderer>(); this.LineRenderer.enabled = false; }
// Use this for initialization void Start() { this.mainCalculator = GameObject.Find("Main Camera").GetComponent <GameManager> ().Calculator; this.txtDate = this.gameObject.GetComponent <Text> (); }
public void Drawing() { //Default colors color black = new color(0, 0, 0, ColorHandler.colorMaxValue); color white = new color(ColorHandler.colorMaxValue, ColorHandler.colorMaxValue, ColorHandler.colorMaxValue, ColorHandler.colorMaxValue); //Initialization of graphics and opening painting window Sdl.SDL_Event ev = new Sdl.SDL_Event(); Sdl.SDL_Init(Sdl.SDL_INIT_VIDEO); System.IntPtr screen = Sdl.SDL_SetVideoMode(0, 0, 0, Sdl.SDL_ANYFORMAT); if (screen == IntPtr.Zero) { System.Console.WriteLine("Nem sikerult megnyitni az ablakot!\n"); return; } Sdl.SDL_WM_SetCaption("SDL peldaprogram", "SDL peldaprogram"); //Sets NeightbourHandler NeightbourhoodFactory nfactory = new NeightbourhoodFactory(); NeightbourHandler nh = nfactory.produce(mesh, neighbourhood); //Sets MatrixHandler and ColorHandler MatrixHandler game = new QuadraticMatrixHandler(random, nh, ageT); ColorHandler ch = new ColorHandler(random); //Gets sizes of screen int width = Screen.PrimaryScreen.Bounds.Width; int height = Screen.PrimaryScreen.Bounds.Height; //Calculates main datas int cellSize = 10; const int half = ColorHandler.colorMaxValue / 2; const int state_number = 2; int n = width / cellSize; int m = height / cellSize; int del = 0; int delt = max(n, m) * 2; //Sets CoordinateCalculator CoordinateCalculatorFactory factory = new CoordinateCalculatorFactory(); CoordinateCalculator cc = factory.produce(mesh); //Sets sizes of the matrix to fill the full monitor if (mesh == MeshType.PENTAGON10) { n = n * 2; m = m * 2; } else if (mesh == MeshType.PENTAGON11) { m = m * 2; } else if (mesh == MeshType.PENTAGON12) { m = m * 2; } else if (mesh == MeshType.RECTANGLE_SQUARE) { m = m * 2; } else if (mesh == MeshType.SQUARE_TRIANGLE1) { m = m * 2; } else if (mesh == MeshType.SQUARE_TRIANGLE2) { m = m * 4; } else if (mesh == MeshType.HEXAGON_TRIANGLE1) { m = m * 3; } else if (mesh == MeshType.DODECAGON_TRIANGLE) { m = m * 3; } else if (mesh == MeshType.HEXAGON_TRIANGLE2) { m = m * 5; } else if (mesh == MeshType.HEXAGON_SQUARE_TRIANGLE) { m = m * 2; } else if (mesh == MeshType.DODECAGON_HEXAGON_SQUARE) { m = m * 2; } //Generates random matrix as default double probability = 0.3; ModuloIndexableList <ModuloIndexableList <int> > cell_matrix = game.generate_random_matrix(n, m, probability); if (matrix == MatrixType.ONE_POINT) { cell_matrix = game.generate_matrix(n, m); } //Adds state rules in order of states List <List <int> > rule = new List <List <int> >(); rule.Add(borns); rule.Add(survives); //Generating and setting colors List <color> colors = ch.generate_colors_(); int index1 = random.Next(0, colors.Count); color c1 = colors[index1]; Dictionary <color, List <color> > color_matrix = ch.generate_colors(); List <color> cls = color_matrix[c1]; int index2 = random.Next(0, cls.Count); color col = cls[index2]; color col1 = white; color col2 = black; int wt = random.Next(0, 6); if (wt == 0) { col1 = c1; col2 = ch.generate_dark(col); } else if (wt == 1) { col1 = ch.generate_light(col); col2 = c1; } else if (wt == 2) { col1 = col; col2 = c1; } else if (wt == 3) { col1 = c1; col2 = col; } else if (wt == 4) { col1 = c1; col2 = ch.generate_light(col); } if (wt == 5) { col1 = ch.generate_dark(col); col2 = c1; } Sdl.SDL_WaitEvent(out ev); //Drawing loop while (ev.type != Sdl.SDL_QUIT && ev.type != Sdl.SDL_KEYDOWN) { if (ev.type == Sdl.SDL_KEYDOWN) { System.Console.WriteLine("Billentyű észlelve."); Sdl.SDL_Quit(); } else if (ev.type == Sdl.SDL_MOUSEBUTTONDOWN) { System.Console.WriteLine("Egér észlelve."); Sdl.SDL_Quit(); } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (mesh == MeshType.SQUARE) { short x1 = (short)(i * cellSize + 1); short y1 = (short)(j * cellSize + 1); short x2 = (short)((i + 1) * cellSize); short y2 = (short)((j + 1) * cellSize); // drawing quadratic mesh with age if (ageT) { List <color> cols = ch.generate_age_colors(); if (cell_matrix[i][j] == 0) { Tao.Sdl.SdlGfx.boxRGBA(screen, x1, y1, x2, y2, (byte)(black.red), (byte)(black.green), (byte)(black.blue), (byte)(black.alpha)); } else { int ix = cell_matrix[i][j] % cols.Count; if (ix < 0) { ix = ix + cols.Count; } Tao.Sdl.SdlGfx.boxRGBA(screen, x1, y1, x2, y2, (byte)((cols[ix]).red), (byte)((cols[ix]).green), (byte)((cols[ix]).blue), (byte)(cols[ix].alpha)); } } else { // drawing quadratic mesh without age if (cell_matrix[i][j] == 1) { Tao.Sdl.SdlGfx.boxRGBA(screen, x1, y1, x2, y2, (byte)(col2.red), (byte)(col2.green), (byte)(col2.blue), (byte)(col2.alpha)); } else if (cell_matrix[i][j] == 0) { Tao.Sdl.SdlGfx.boxRGBA(screen, x1, y1, x2, y2, (byte)(col1.red), (byte)(col1.green), (byte)(col1.blue), (byte)(col1.alpha)); } } } else { // drawing another mesh List <Tuple <double, double> > points = cc.calculate_polygon_coordinates(i, j); short[] vx = new short[points.Count]; short[] vy = new short[points.Count]; for (int k = 0; k < points.Count; k++) { double xx = points[k].Item1; double yy = points[k].Item2; xx = xx * cellSize; yy = yy * cellSize; if (mesh == MeshType.TRIANGLE) { //to have better rates of sides and hights xx = xx * Math.Sqrt(3); //to set the middle into the middle xx = xx - width / 14; yy = yy - height / 21; } else if (mesh == MeshType.HEXAGON) { xx = xx * 2; //to set the middle into the middle xx = xx - 2 * width / 9; yy = yy - height / 35; } else if (mesh == MeshType.PENTAGON1) { //to set the middle into the middle yy = yy - height / 3; } else if (mesh == MeshType.PENTAGON3) { //to set the middle into the middle xx = xx - width / 2; yy = yy - height; } else if (mesh == MeshType.PENTAGON11) { //to set the middle into the middle xx = xx - 1.75 * width; } else if (mesh == MeshType.PENTAGON14) { xx = xx * 2; //to set the middle into the middle xx = xx - 2 * width / 9 - width / 4; yy = yy - height / 35; yy = 2 * yy + height / 8; } else if (mesh == MeshType.RECTANGLE1) { //to set the middle into the middle //rotating by 45 degrees double zz = Math.Sqrt(2) / 2 * xx + Math.Sqrt(3) / 2 * yy; xx = -Math.Sqrt(3) / 2 * xx + Math.Sqrt(2) / 2 * yy + (3 / 2) * width + 2 * width / 5; yy = zz - height / 2 - height / 4; xx = xx + width / 12; } else if (mesh == MeshType.RECTANGLE2) { //to set the middle into the middle xx = xx - width / 2; } else if ((mesh == MeshType.TILED_RECTANGLE1) || (mesh == MeshType.RECTANGLE_SQUARE)) { //to set the middle into the middle //rotating by 45 degrees double zz = Math.Sqrt(2) / 2 * xx + Math.Sqrt(3) / 2 * yy; xx = -Math.Sqrt(3) / 2 * xx + Math.Sqrt(2) / 2 * yy + (3 / 2) * width + 2 * width / 5; yy = zz - height / 2 - height / 4; if (mesh == MeshType.TILED_RECTANGLE1) { xx = xx + width / 8; } else { xx = xx - width / 8; yy = yy - height / 12; } } else if ((mesh == MeshType.SQUARE_TRIANGLE1) || (mesh == MeshType.SQUARE_TRIANGLE2)) { //to set the middle into the middle yy = yy - height / 8; } else if ((mesh == MeshType.HEXAGON_SQUARE_TRIANGLE) || (mesh == MeshType.DODECAGON_HEXAGON_SQUARE)) { xx = xx * 2; yy = yy * 2; //to set the middle into the middle xx = xx - width / 2; yy = yy - height / 12; } else if (mesh == MeshType.HEXAGON_TRIANGLE2) { //to set the middle into the middle xx = xx - 2 * width / 3; yy = yy - 3 * height; } int xt = (int)xx; int yt = (int)yy; short xs = (short)xt; short ys = (short)yt; vx[k] = xs; vy[k] = ys; if ((mesh == MeshType.TRIANGLE) || (mesh == MeshType.HEXAGON)) { vx[k] = ys; vy[k] = xs; } } if (ageT) { // drawing mesh with age List <color> cols = ch.generate_age_colors(); if (cell_matrix[i][j] == 0) { Tao.Sdl.SdlGfx.filledPolygonRGBA(screen, vx, vy, points.Count, (byte)(black.red), (byte)(black.green), (byte)(black.blue), (byte)(black.alpha)); } else { int ix = cell_matrix[i][j] % cols.Count; if (ix < 0) { ix = ix + cols.Count; } Tao.Sdl.SdlGfx.filledPolygonRGBA(screen, vx, vy, points.Count, (byte)((cols[ix]).red), (byte)((cols[ix]).green), (byte)((cols[ix]).blue), (byte)(cols[ix].alpha)); } } else { // drawing mesh without age if (cell_matrix[i][j] == 1) { Tao.Sdl.SdlGfx.filledPolygonRGBA(screen, vx, vy, points.Count, (byte)(col2.red), (byte)(col2.green), (byte)(col2.blue), (byte)(col2.alpha)); } else if (cell_matrix[i][j] == 0) { Tao.Sdl.SdlGfx.filledPolygonRGBA(screen, vx, vy, points.Count, (byte)(col1.red), (byte)(col1.green), (byte)(col1.blue), (byte)(col1.alpha)); } } } } } if (del == delt) { //Generates new beginning matrix with new colors if (matrix == MatrixType.RANDOM) { cell_matrix = game.generate_random_matrix(n, m, probability); } else if (matrix == MatrixType.ONE_POINT) { cell_matrix = game.generate_matrix(n, m); del = 0; } wt = random.Next(0, 6); if (wt == 0) { col1 = c1; col2 = ch.generate_dark(col); } else if (wt == 1) { col1 = ch.generate_light(col); col2 = c1; } else if (wt == 2) { col1 = col; col2 = c1; } else if (wt == 3) { col1 = c1; col2 = col; } else if (wt == 4) { col1 = c1; col2 = ch.generate_light(col); } if (wt == 5) { col1 = ch.generate_dark(col); col2 = c1; } } else { cell_matrix = game.new_matrix(cell_matrix, rule); } /* Flips drawings */ Sdl.SDL_Flip(screen); Sdl.SDL_WaitEvent(out ev); System.Threading.Thread.Sleep(1000); del = del + 1; } /* closing window */ Sdl.SDL_Quit(); return; }
public Settings(MeshType mesh) { this.mesh = mesh; Console.WriteLine(mesh); Text = "Beállítások"; sizeX = 660; sizeY = 340; Size = new Size(sizeX, sizeY); //Cancelling button cancel = new CheckBox(); cancel.Text = "Mégsem"; cancel.Parent = this; cancel.Location = new Point(100, 215); cancel.BackColor = Color.Coral; cancel.Show(); cancel.Visible = true; Controls.Add(cancel); //Okey button ok = new CheckBox(); ok.Text = "OK"; ok.Parent = this; ok.Location = new Point(400, 215); ok.BackColor = Color.Coral; ok.Show(); ok.Visible = true; Controls.Add(ok); //Labels of panels Label matrixLabel = new Label(); matrixLabel.Parent = this; matrixLabel.Text = "Kezdőmátrix"; matrixLabel.Location = new Point(30, 30); matrixLabel.BackColor = Color.Coral; Label neighbourhoodLabel = new Label(); neighbourhoodLabel.Parent = this; neighbourhoodLabel.Text = "Szomszédság"; neighbourhoodLabel.Location = new Point(240, 30); neighbourhoodLabel.BackColor = Color.Coral; //Starting matrix is empty, expect of the middle point pointRb = new RadioButton(); pointRb.Parent = this; pointRb.Location = new Point(30, 30); pointRb.Text = "Egy pont"; pointRb.Checked = false; //Strationg matrix is filled by random randomRb = new RadioButton(); randomRb.Parent = this; randomRb.Location = new Point(30, 60); randomRb.Text = "Véletlen"; randomRb.Checked = false; matrixPanel = new Panel(); matrixPanel.Parent = this; matrixPanel.Location = new Point(30, 30); matrixPanel.Text = ""; matrixPanel.BackColor = Color.Coral; matrixPanel.Controls.Add(pointRb); matrixPanel.Controls.Add(randomRb); matrixPanel.AutoSize = true; CoordinateCalculatorFactory factory = new CoordinateCalculatorFactory(); CoordinateCalculator cc = factory.produce(mesh); //Neighbours are cells joining by side if (cc.hasUlam()) { ulamRb = new RadioButton(); ulamRb.Parent = this; ulamRb.Location = new Point(150, 30); ulamRb.Text = "Ulam"; ulamRb.Checked = false; } //Neighbours are cells joining by side or by diagonally if (cc.hasConway()) { conwayRb = new RadioButton(); conwayRb.Parent = this; conwayRb.Location = new Point(150, 60); conwayRb.Text = "Conway"; conwayRb.Checked = false; } //Neighbours are cells at knight move if (cc.hasKnight()) { knightRb = new RadioButton(); knightRb.Parent = this; knightRb.Location = new Point(150, 90); knightRb.Text = "Lóugrás"; knightRb.Checked = false; } //Neighbours are cells joining by side or by diagonally if (cc.hasGreatConway()) { greatConwayRb = new RadioButton(); greatConwayRb.Parent = this; greatConwayRb.Location = new Point(150, 120); greatConwayRb.Text = "Nagy Conway"; greatConwayRb.Checked = false; } //Neighbours are cells that would join by side or by diagonally //if the cells would be pentagons if (cc.hasOblique()) { obliqueRb = new RadioButton(); obliqueRb.Parent = this; obliqueRb.Location = new Point(150, 150); obliqueRb.Text = "Ferde"; obliqueRb.Checked = false; } neighbourhoodPanel = new Panel(); neighbourhoodPanel.Parent = this; neighbourhoodPanel.Location = new Point(150, 30); neighbourhoodPanel.Text = ""; neighbourhoodPanel.BackColor = Color.Coral; neighbourhoodPanel.Controls.Add(ulamRb); neighbourhoodPanel.Controls.Add(conwayRb); neighbourhoodPanel.Controls.Add(knightRb); neighbourhoodPanel.Controls.Add(greatConwayRb); neighbourhoodPanel.Controls.Add(obliqueRb); neighbourhoodPanel.AutoSize = true; //The eventhandler of the buttons is the function OnChanged(object sender, EventArgs e) cancel.CheckedChanged += new EventHandler(OnChanged); ok.CheckedChanged += new EventHandler(OnChanged); Paint += new PaintEventHandler(OnPaint); CenterToScreen(); }