public Exp TranslateSimpleVar(Access var, Level home) { Expr res = new TEMP(home.Frame.FP()); Level l = home; while (l != var.Home) { res = l.StaticLink().Acc.Exp(res); l = l.Parent; } return(new Ex(var.Acc.Exp(res))); }
void OnEnable() // Create all of the objects { // Instantiate (BossMusic_Controller); // MusicController.control.Fade_Play_Unfade (BossMusic); MusicController.control.PlayNewClip(BossMusic); NewObjectSpawner TEMP; CenterHead.SetColor(0, Color.white); BackgroundSpin.SetActive(true); CenterHead.UnfadeObject(0, BackgroundSpin, 1f); TEMP = BackgroundSpin.GetComponent <NewObjectSpawner> (); TEMP.RotateDegrees(0, 0.1f, 0, false); TEMP = LeftEar.GetComponent <NewObjectSpawner> (); TEMP.CreateTriangle(0, 0.1f, 9, 0.25f, 0.25f); CenterHead.TESTCOMBINE(3, TEMP); TEMP = RightEar.GetComponent <NewObjectSpawner> (); TEMP.CreateTriangle(0, 0.1f, 9, 0.25f, 0.25f); CenterHead.TESTCOMBINE(3, TEMP); LeftEye = LeftEyeObject.GetComponent <NewObjectSpawner> (); LeftEye.CreateLineInDirection(0, 0, 1, new Vector2(0, 0), 0); LeftEye.RotateDegrees(0, 0, 315, true); // LeftEye.RotateTwordsObject_Player (0, 5, false); RightEye = RightEyeObject.GetComponent <NewObjectSpawner> (); RightEye.CreateLineInDirection(0, 0, 1, new Vector2(0, 0), 0); RightEye.RotateDegrees(0, 0, 315, true); // RightEye.RotateTwordsObject_Player (0, 5, false); TEMP = Mouth.GetComponent <NewObjectSpawner> (); TEMP.CreateCircle(0, 0.1f, 7, 0.5f, 0.5f, 2); TEMP.CreateCircle(0, 0.1f, 5, 0.05f, 0.05f, 1); TEMP.CreateLineInDirection_World(0, 0.1f, 2, new Vector2(0, -1), 0.5f); CenterHead.TESTCOMBINE(3, TEMP); LeftArm.SetColor(0, Color.white); RightArm.SetColor(0, Color.white); CenterHead.CreateCircle(0, 0.05f, 30, 1, 1, 1); LeftArm.CreateSquare(0, 0.1f, 16, 0.5f, 0.4f); RightArm.CreateSquare(0, 0.1f, 16, 0.5f, 0.4f); LeftArm.SetColor_Random(3); RightArm.SetColor_Random(3); StartCoroutine(C_StartBattle()); }
public ActionResult XacNhanXoaRau(int id, TEMP temp) { //lấy ra đối tượng cần xóa theo mã: SANPHAM sp = data.SANPHAMs.SingleOrDefault(n => n.MASP == id); ViewBag.MaSP = sp.MASP; temp.MASP = sp.MASP; if (sp == null) { Response.StatusCode = 404; return(null); } data.TEMPs.InsertOnSubmit(temp); data.SubmitChanges(); return(RedirectToAction("Rau")); }
public Exp TranslateCallExp(Level home, Level dst, Label name, List<Exp> argValue) { Tree.ExpList args = null; for (int i = argValue.Count - 1; i >= 0; --i) { args = new Tree.ExpList(argValue[i].UnEx(), args); } Level lv = home; Expr staticLink = new TEMP(lv.Frame.FP()); while (dst.Parent != lv) { staticLink = lv.StaticLink().Acc.Exp(staticLink); lv = lv.Parent; } if (!name.Name.StartsWith("_")) args = new Tree.ExpList(staticLink, args); return new Ex(new CALL(new NAME(name), args)); }
private void btnTK_DoanhThu_Click(object sender, EventArgs e) { using (DBKhoHangDataContext db = new DBKhoHangDataContext()) { var rs = from ctpx in db.CT_PHIEUXUATs join px in db.PHIEUXUATs on ctpx.id_phieuxuat equals px.id_phieuxuat join sp in db.HANGHOAs on ctpx.id_hanghoa equals sp.id_hanghoa where px.ngayxuat >= dtpTK_NgayBatDau.Value && px.ngayxuat <= dtp_NgayKetThuc.Value select new { ThanhTien = ctpx.soluongxuat * Convert.ToInt32(sp.giaban) } into OD group OD by OD.ThanhTien into TEMP select new { Total = TEMP.Sum(n => n.ThanhTien) }; foreach (var item in rs) { lbTongDoanhThu.Text = item.ToString(); } } }
public Exp TranslateCallExp(Level home, Level dst, Label name, List <Exp> argValue) { Tree.ExpList args = null; for (int i = argValue.Count - 1; i >= 0; --i) { args = new Tree.ExpList(argValue[i].UnEx(), args); } Level lv = home; Expr staticLink = new TEMP(lv.Frame.FP()); while (dst.Parent != lv) { staticLink = lv.StaticLink().Acc.Exp(staticLink); lv = lv.Parent; } if (!name.Name.StartsWith("_")) { args = new Tree.ExpList(staticLink, args); } return(new Ex(new CALL(new NAME(name), args))); }
public ActionResult UploadArticle() { AddArticleViewModel aavm = new AddArticleViewModel(); aavm.SideBarData = new SideBarViewModel(); aavm.SideBarData.CurrentIndex = 1; aavm.CreateDate = DateTime.Now; Markdown m = new Markdown(); Regex rgx = new Regex("<[^>]+>"); String TEMP; Article readyArticle = new Article(); ArticleBusinessLayer articleBusinessLayer = new ArticleBusinessLayer(); readyArticle.Author = Request.Form["Author"]; readyArticle.Title = Request.Form["Title"]; readyArticle.CreateDate = Convert.ToDateTime(Request.Form["CreateDate"]); readyArticle.Content = m.Transform(Request.Unvalidated.Form["Content"]); TEMP = rgx.Replace(readyArticle.Content, " "); TEMP = TEMP.Replace("\n", ""); if (TEMP.Length >= 80) { readyArticle.Description = TEMP.Substring(0, 79) + "..."; } else { readyArticle.Description = TEMP.Substring(0) + "..."; } articleBusinessLayer.UploadArticle(readyArticle); aavm.Message = "Add article successfully!"; aavm.AlertType = "success"; return(View("Add", aavm)); }
private void button1_Click(object sender, EventArgs e) { name = textBox1.Text; if (checkBox1.Checked) { basement = true; } if (checkBox2.Checked) { loft = true; } int max = (int)((float)textBox1.Width / textBox1.Font.Size); var lines = TEMP.WrapText(textBox1.Text, max); name = ""; for (int i = 0; i < lines.Count(); i++) { if (i != lines.Count() - 1) { name += lines[i] + Environment.NewLine; } else { name += lines[i]; } } if (name.Length <= 1) { MessageBox.Show("Пожалуйста введите имя здания"); } else { count = (int)numericUpDown1.Value; dialogResult = DialogResult.Yes; Close(); } }
void Awake() // Setup all of the objects { EventManager.resetObjects += Reset; LeftArmStartingPosition = LeftArmObject.transform.localPosition; RightArmStartingPosition = RightArmObject.transform.localPosition; CenterStartingPosition = gameObject.transform.localPosition; StartingMusic = MusicController.control.musicclip; Rigidbody2D TEMPBODY; NewObjectSpawner TEMP; BottomLeftSpawn = BottomLeft.AddComponent <NewObjectSpawner> (); BottomLeftSpawn.SetProjectile(0, Projectile); BottomLeftSpawn.SetColor_Random(0); BottomLeftSpawn.SetDeathTimer(0, 10); BottomRightSpawn = BottomRight.AddComponent <NewObjectSpawner> (); BottomRightSpawn.SetProjectile(0, Projectile); BottomRightSpawn.SetColor_Random(0); BottomRightSpawn.SetDeathTimer(0, 10); if (!BackgroundSpin.GetComponent <NewObjectSpawner>()) { BackgroundSpin.AddComponent <NewObjectSpawner> (); } CenterHead = gameObject.AddComponent <NewObjectSpawner> (); CenterHead.SetProjectile(0, Projectile); CenterHead.SetColor(0, Color.white); TEMPBODY = gameObject.AddComponent <Rigidbody2D> (); TEMPBODY.isKinematic = true; TEMP = LeftEar.AddComponent <NewObjectSpawner> (); TEMP.SetProjectile(0, Projectile); TEMP.SetColor(0, Color.white); TEMP.RotateDegrees(0, 0, 45, true); TEMP = RightEar.AddComponent <NewObjectSpawner> (); TEMP.SetProjectile(0, Projectile); TEMP.SetColor(0, Color.white); TEMP.RotateDegrees(0, 0, 315, true); LeftEye = LeftEyeObject.AddComponent <NewObjectSpawner> (); LeftEye.SetProjectile(0, EyeballPrefab); LeftEye.SetColor(0, Color.white); RightEye = RightEyeObject.AddComponent <NewObjectSpawner> (); RightEye.SetProjectile(0, EyeballPrefab); RightEye.SetColor(0, Color.white); TEMP = Mouth.AddComponent <NewObjectSpawner> (); TEMP.SetProjectile(0, Projectile); TEMP.SetColor(0, Color.white); TEMP.RotateDegrees(0, 0, 260, true); LeftArm = LeftArmObject.AddComponent <NewObjectSpawner> (); LeftArm.SetProjectile(0, Projectile); LeftArm.SetColor(0, Color.white); TEMPBODY = LeftArmObject.AddComponent <Rigidbody2D> (); TEMPBODY.isKinematic = true; RightArm = RightArmObject.AddComponent <NewObjectSpawner> (); RightArm.SetProjectile(0, Projectile); RightArm.SetColor(0, Color.white); TEMPBODY = RightArmObject.AddComponent <Rigidbody2D> (); TEMPBODY.isKinematic = true; }
public void SendNMEA() { string message; // Build HDG Sentence **************************************************************************************** if (HDT.IsValid()) // Implies MVAR is valid too { string mv; if (MVAR.Val > 0) { mv = "E"; } else { mv = "W"; } double hdg = (HDT.Val - MVAR.Val + 360) % 360; message = "IIHDG," + hdg.ToString("0.#") + ",,," + Math.Abs(MVAR.Val).ToString("0.#") + "," + mv; int checksum = 0; foreach (char c in message) { checksum ^= Convert.ToByte(c); } message = "$" + message + "*" + checksum.ToString("X2") + "\r\n"; if (Properties.Settings.Default.HeadingSentence.OutPort1) { if (SerialPort1.IsOpen) { SerialPort1.WriteLine(message); } } if (Properties.Settings.Default.HeadingSentence.OutPort2) { if (SerialPort2.IsOpen) { SerialPort2.WriteLine(message); } } if (Properties.Settings.Default.HeadingSentence.OutPort3) { if (SerialPort3.IsOpen) { SerialPort3.WriteLine(message); } } if (Properties.Settings.Default.HeadingSentence.OutPort4) { if (SerialPort4.IsOpen) { SerialPort4.WriteLine(message); } } } // Build MWV Sentence **************************************************************************************** if (AWA.IsValid()) { message = "IIMWV," + ((AWA.Val + 360) % 360).ToString("0") + ",R," + AWS.Val.ToString("0.#") + ",N,A"; int checksum = 0; foreach (char c in message) { checksum ^= Convert.ToByte(c); } message = "$" + message + "*" + checksum.ToString("X2") + "\r\n"; if (Properties.Settings.Default.AppWindSentence.OutPort1) { if (SerialPort1.IsOpen) { SerialPort1.WriteLine(message); } } if (Properties.Settings.Default.AppWindSentence.OutPort2) { if (SerialPort2.IsOpen) { SerialPort2.WriteLine(message); } } if (Properties.Settings.Default.AppWindSentence.OutPort3) { if (SerialPort3.IsOpen) { SerialPort3.WriteLine(message); } } if (Properties.Settings.Default.AppWindSentence.OutPort4) { if (SerialPort4.IsOpen) { SerialPort4.WriteLine(message); } } } // Build VHW Sentence **************************************************************************************** if (SPD.IsValid()) { string hdg; if (HDT.IsValid()) { hdg = HDT.Val.ToString("0") + ",T,,M,"; } else { hdg = ",T,,M,"; } message = "IIVHW," + hdg + SPD.Val.ToString("0.##") + ",N,,K"; int checksum = 0; foreach (char c in message) { checksum ^= Convert.ToByte(c); } message = "$" + message + "*" + checksum.ToString("X2") + "\r\n"; if (Properties.Settings.Default.HullSpeedSentence.OutPort1) { if (SerialPort1.IsOpen) { SerialPort1.WriteLine(message); } } if (Properties.Settings.Default.HullSpeedSentence.OutPort2) { if (SerialPort2.IsOpen) { SerialPort2.WriteLine(message); } } if (Properties.Settings.Default.HullSpeedSentence.OutPort3) { if (SerialPort3.IsOpen) { SerialPort3.WriteLine(message); } } if (Properties.Settings.Default.HullSpeedSentence.OutPort4) { if (SerialPort4.IsOpen) { SerialPort4.WriteLine(message); } } } // Build DPT Sentence **************************************************************************************** if (DPT.IsValid()) { message = "IIDPT," + DPT.Val.ToString("0.#") + ",0"; int checksum = 0; foreach (char c in message) { checksum ^= Convert.ToByte(c); } message = "$" + message + "*" + checksum.ToString("X2") + "\r\n"; if (Properties.Settings.Default.DepthSentence.OutPort1) { if (SerialPort1.IsOpen) { SerialPort1.WriteLine(message); } } if (Properties.Settings.Default.DepthSentence.OutPort2) { if (SerialPort2.IsOpen) { SerialPort2.WriteLine(message); } } if (Properties.Settings.Default.DepthSentence.OutPort3) { if (SerialPort3.IsOpen) { SerialPort3.WriteLine(message); } } if (Properties.Settings.Default.DepthSentence.OutPort4) { if (SerialPort4.IsOpen) { SerialPort4.WriteLine(message); } } } // Build RMC Sentence **************************************************************************************** if (COG.IsValid()) // Implies SOG, LAT and LON are also valid { DateTime UTC = DateTime.UtcNow; string hms = UTC.Hour.ToString("00") + UTC.Minute.ToString("00") + UTC.Second.ToString("00"); string date = UTC.Date.Day.ToString("00") + UTC.Date.Month.ToString("00") + UTC.Date.Year.ToString().Substring(2, 2); double deg, min; string cd; deg = Math.Abs(Math.Truncate(LAT.Val)); min = (Math.Abs(LAT.Val) - deg) * 60; if (LAT.Val > 0) { cd = "N"; } else { cd = "S"; } string lat = deg.ToString("000") + min.ToString("00.###") + "," + cd; deg = Math.Abs(Math.Truncate(LON.Val)); min = (Math.Abs(LON.Val) - deg) * 60; if (LON.Val > 0) { cd = "E"; } else { cd = "W"; } string lon = deg.ToString("000") + min.ToString("00.###") + "," + cd; if (MVAR.Val > 0) { cd = "E"; } else { cd = "W"; } double cog = (COG.Val + 360) % 360; message = "IIRMC," + hms + ",A," + lat + "," + lon + "," + SOG.Val.ToString("#.##") + "," + cog.ToString("0.#") + "," + date + "," + Math.Abs(MVAR.Val).ToString("0.#") + "," + cd + ",A"; int checksum = 0; foreach (char c in message) { checksum ^= Convert.ToByte(c); } message = "$" + message + "*" + checksum.ToString("X2") + "\r\n"; if (Properties.Settings.Default.NavSentence.OutPort1) { if (SerialPort1.IsOpen) { SerialPort1.WriteLine(message); } } if (Properties.Settings.Default.NavSentence.OutPort2) { if (SerialPort2.IsOpen) { SerialPort2.WriteLine(message); } } if (Properties.Settings.Default.NavSentence.OutPort3) { if (SerialPort3.IsOpen) { SerialPort3.WriteLine(message); } } if (Properties.Settings.Default.NavSentence.OutPort4) { if (SerialPort4.IsOpen) { SerialPort4.WriteLine(message); } } } // Build RMB Sentence **************************************************************************************** if (WPT.IsValid()) // Implies BRG and DST are also valid { string xte = ",,"; string owpt = ","; if (XTE.IsValid()) { if (XTE.Val > 0) { xte = XTE.Val.ToString("0.##") + ",R,"; } else { xte = Math.Abs(XTE.Val).ToString("0.##") + ",L,"; } owpt = LWPT.FormattedValue + ","; } double brg = (BRG.Val + 360) % 360; message = "IIRMB,A," + xte + owpt + WPT.FormattedValue + ",,,,," + DST.Val.ToString("0.##") + "," + brg.ToString("0.#") + "," + VMGWPT.Val.ToString("0.##") + ",,A"; int checksum = 0; foreach (char c in message) { checksum ^= Convert.ToByte(c); } message = "$" + message + "*" + checksum.ToString("X2") + "\r\n"; if (Properties.Settings.Default.RouteSentence.OutPort1) { if (SerialPort1.IsOpen) { SerialPort1.WriteLine(message); } } if (Properties.Settings.Default.RouteSentence.OutPort2) { if (SerialPort2.IsOpen) { SerialPort2.WriteLine(message); } } if (Properties.Settings.Default.RouteSentence.OutPort3) { if (SerialPort3.IsOpen) { SerialPort3.WriteLine(message); } } if (Properties.Settings.Default.RouteSentence.OutPort4) { if (SerialPort4.IsOpen) { SerialPort4.WriteLine(message); } } } // Build MTW Sentence **************************************************************************************** if (TEMP.IsValid()) { message = "IIMTW," + TEMP.Val.ToString("0.#") + ",C"; int checksum = 0; foreach (char c in message) { checksum ^= Convert.ToByte(c); } message = "$" + message + "*" + checksum.ToString("X2") + "\r\n"; if (Properties.Settings.Default.WaterTempSentence.OutPort1) { if (SerialPort1.IsOpen) { SerialPort1.WriteLine(message); } } if (Properties.Settings.Default.WaterTempSentence.OutPort2) { if (SerialPort2.IsOpen) { SerialPort2.WriteLine(message); } } if (Properties.Settings.Default.WaterTempSentence.OutPort3) { if (SerialPort3.IsOpen) { SerialPort3.WriteLine(message); } } if (Properties.Settings.Default.WaterTempSentence.OutPort4) { if (SerialPort4.IsOpen) { SerialPort4.WriteLine(message); } } } // Build PTAK4 Sentence **************************************************************************************** if (LINEDST.IsValid()) { string message4; message4 = "PTAK,FFD4," + LINEDST.Val.ToString("0"); int checksum = 0; foreach (char c in message4) { checksum ^= Convert.ToByte(c); } message4 = "$" + message4 + "*" + checksum.ToString("X2") + "\r\n"; if (Properties.Settings.Default.TacktickPerformanceSentence.OutPort1) { if (SerialPort1.IsOpen) { SerialPort1.WriteLine(message4); } } if (Properties.Settings.Default.TacktickPerformanceSentence.OutPort2) { if (SerialPort2.IsOpen) { SerialPort2.WriteLine(message4); } } if (Properties.Settings.Default.TacktickPerformanceSentence.OutPort3) { if (SerialPort3.IsOpen) { SerialPort3.WriteLine(message4); } } if (Properties.Settings.Default.TacktickPerformanceSentence.OutPort4) { if (SerialPort4.IsOpen) { SerialPort4.WriteLine(message4); } } } }
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); Database.SetInitializer(new DropCreateDatabaseIfModelChanges <OTSDBDAL>()); /* Create by Dwayne 2015-12-4 14:05:12 */ UserInfoBusinessLayer userInfoBusinessLayer = new UserInfoBusinessLayer(); UserInfo userInfo = new UserInfo(); userInfo.NickName = "Admin"; userInfo.Mail = "*****@*****.**"; userInfo.Password = "******"; userInfo.Grade = 1; userInfoBusinessLayer.SignUp(userInfo); ArticleBusinessLayer articleBusinessLayer = new ArticleBusinessLayer(); Article article = new Article(); Regex rgx = new Regex("<[^>]+>"); String TEMP; Markdown m = new Markdown(); StreamReader SR1 = new StreamReader(Server.MapPath("./testArticle/Markdown_Documentation_Basics.text")); StreamReader SR2 = new StreamReader(Server.MapPath("./testArticle/Markdown_Documentation_Syntax.text")); StreamReader SR3 = new StreamReader(Server.MapPath("./testArticle/markdown-readme.text")); article.Author = "TestTest"; article.CreateDate = DateTime.Now; article.Title = "Test" + (1).ToString(); TEMP = SR1.ReadToEnd(); article.Content = m.Transform(TEMP); TEMP = rgx.Replace(article.Content, " "); TEMP = TEMP.Replace("\n", ""); if (TEMP.Length >= 80) { article.Description = TEMP.Substring(0, 79) + "..."; } else { article.Description = TEMP.Substring(0) + "..."; } articleBusinessLayer.UploadArticle(article); article.Author = "TestTest"; article.CreateDate = DateTime.Now; article.Title = "Test" + (2).ToString(); TEMP = SR2.ReadToEnd(); article.Content = m.Transform(TEMP); TEMP = rgx.Replace(article.Content, " "); TEMP = TEMP.Replace("\n", ""); if (TEMP.Length >= 80) { article.Description = TEMP.Substring(0, 79) + "..."; } else { article.Description = TEMP.Substring(0) + "..."; } articleBusinessLayer.UploadArticle(article); article.Author = "TestTest"; article.CreateDate = DateTime.Now; article.Title = "Test" + (3).ToString(); TEMP = SR3.ReadToEnd(); article.Content = m.Transform(TEMP); TEMP = rgx.Replace(article.Content, " "); TEMP = TEMP.Replace("\n", ""); if (TEMP.Length >= 80) { article.Description = TEMP.Substring(0, 79) + "..."; } else { article.Description = TEMP.Substring(0) + "..."; } articleBusinessLayer.UploadArticle(article); SR1.Close(); SR2.Close(); SR3.Close(); }
void PrintExp(TEMP e, int d) { Indent(d); Say("TEMP "); Say(TempMap.TempMap(e.Temp)); }
public void CalcNav(DateTime now, bool bypassComm = false) { #region Primitives if (rmc_received || bypassComm) { LAT.Val = lat; LON.Val = lon; SOG.Val = sog; COG.Val = cog; LAT.SetValid(now); LON.SetValid(now); SOG.SetValid(now); COG.SetValid(now); RMC_received_Timer.Start(); } if (vhw_received || bypassComm) { SPD.Val = spd; SPD.SetValid(now); } if (dpt_received || bypassComm) { DPT.Val = dpt; DPT.SetValid(now); } if (mwv_received || bypassComm) { AWA.Val = awa; AWS.Val = aws; AWA.SetValid(now); AWS.SetValid(now); } if (mtw_received || bypassComm) { TEMP.Val = temp; TEMP.SetValid(now); } if (hdg_received || bypassComm) { double mv = Properties.Settings.Default.MagVar; //default if (mvar2 != 0) { mv = mvar2; //From HDG } if (mvar1 != 0) { mv = mvar1; //From RMC } MVAR.Val = mv; MVAR.SetValid(now); if (bypassComm) { mv = 0; // heading from log file is "true heading" no need for correction } HDT.Val = hdg + mv; HDT.SetValid(now); } #endregion #region Position, Leg bearing, distance, XTE and VMG if (LAT.IsValid() && LON.IsValid()) { POS.Val.Latitude = LAT.Val; POS.Val.Longitude = LON.Val; POS.SetValid(now); } else { POS.Invalidate(); } if (ActiveLeg != null) { LWLAT.Val = ActiveLeg.FromLocation.Latitude; LWLAT.SetValid(now); LWLON.Val = ActiveLeg.FromLocation.Longitude; LWLON.SetValid(now); LWPT.Val.str = ActiveLeg.FromMark.Name; LWPT.SetValid(now); } else { LWLAT.Invalidate(); LWLON.Invalidate(); LWPT.Invalidate(); } if (!bypassComm || replayLog) { if (ActiveMark != null && POS.IsValid()) { WLAT.Val = ActiveMark.Location.Latitude; WLAT.SetValid(now); WLON.Val = ActiveMark.Location.Longitude; WLON.SetValid(now); WPT.Val.str = ActiveMark.Name; WPT.SetValid(now); BRG.Val = CalcBearing(LAT.Val, LON.Val, WLAT.Val, WLON.Val); BRG.SetValid(now); DST.Val = CalcDistance(LAT.Val, LON.Val, WLAT.Val, WLON.Val) / 1852; DST.SetValid(now); } else { WLAT.Invalidate(); WLON.Invalidate(); WPT.Invalidate(); BRG.IsValid(); DST.IsValid(); } } if (WPT.IsValid() && LWPT.IsValid()) { LEGBRG.Val = CalcBearing(LWLAT.Val, LWLON.Val, WLAT.Val, WLON.Val); LEGBRG.SetValid(now); } else { if (LEGBRG.IsValid()) { LEGBRG.Invalidate(); } } if (LWPT.IsValid()) { XTE.Val = Math.Asin(Math.Sin(DST.Val * 1.852 / 6371) * Math.Sin((BRG.Val - LEGBRG.Val) * Math.PI / 180)) * 6371 / 1.852; XTE.SetValid(now); } else if (XTE.IsValid()) { XTE.Invalidate(); } if (SOG.IsValid() && BRG.IsValid()) { VMGWPT.Val = SOG.Val * Math.Cos((COG.Val - BRG.Val) * Math.PI / 180); VMGWPT.SetValid(now); } else { if (VMGWPT.IsValid()) { VMGWPT.Invalidate(); } } #endregion #region True Wind if (AWA.IsValid() && SPD.IsValid()) { double Dx = AWS.Val * Math.Cos(AWA.Val * Math.PI / 180) - SPD.Val; double Dy = AWS.Val * Math.Sin(AWA.Val * Math.PI / 180); TWS.Val = Math.Sqrt(Dx * Dx + Dy * Dy); TWS.SetValid(now); TWA.Val = Math.Atan2(Dy, Dx) * 180 / Math.PI; TWA.SetValid(now); VMG.Val = SPD.Val * Math.Cos(TWA.Val * Math.PI / 180); VMG.SetValid(now); } else { if (TWS.IsValid()) { TWS.Invalidate(); } if (TWA.IsValid()) { TWA.Invalidate(); } if (VMG.IsValid()) { VMG.Invalidate(); } } if (TWS.IsValid() && HDT.IsValid()) { TWD.Val = HDT.Val + TWA.Val; TWD.SetValid(now); } else { if (TWD.IsValid()) { TWD.Invalidate(); } } #endregion #region Heel //if (AWA.IsValid() && SPD.IsValid()) //{ // double k = 7, // a = 2, // b = 200, // c = 1.5; // var awa = Math.Abs(AWA.Val); // var aws = AWS.Val; // HEEL.Val = k * awa * Math.Pow(aws, c) / (Math.Pow(awa, a) + b); // if (HEEL.Val > 45) HEEL.Val = 45; // HEEL.SetValid(now); //} //else //{ // if (HEEL.IsValid()) // HEEL.Invalidate(); //} #endregion #region Drift if (SOG.IsValid() && COG.IsValid() && HDT.IsValid()) { double Dx = SOG.Val * Math.Cos(COG.Val * Math.PI / 180) - SPD.Val * Math.Cos(HDT.Val * Math.PI / 180); double Dy = SOG.Val * Math.Sin(COG.Val * Math.PI / 180) - SPD.Val * Math.Sin(HDT.Val * Math.PI / 180); DRIFT.Val = Math.Sqrt(Dx * Dx + Dy * Dy); DRIFT.SetValid(now); SET.Val = Math.Atan2(Dy, Dx) * 180 / Math.PI; SET.SetValid(now); } else { if (DRIFT.IsValid()) { DRIFT.Invalidate(); } if (SET.IsValid()) { SET.Invalidate(); } } #endregion #region Performance if (BRG.IsValid() && TWD.IsValid() && SPD.IsValid() && NavPolar.IsLoaded) { double Angle = Math.Abs((TWD.Val - BRG.Val) % 360); if (Angle > 180) { Angle = 360 - Angle; } PolarPoint pb = NavPolar.GetBeatTarget(TWS.Average(Inst.BufHalfMin)); PolarPoint pr = NavPolar.GetRunTarget(TWS.Average(Inst.BufHalfMin)); if (Math.Abs(Angle) <= pb.TWA) // Beating { TGTSPD.Val = pb.SPD; TGTSPD.SetValid(now); TGTTWA.Val = pb.TWA; TGTTWA.SetValid(now); PERF.Val = VMG.Val / (pb.SPD * Math.Cos(pb.TWA * Math.PI / 180)); PERF.SetValid(now); sailingMode = SailingMode.Beating; } if (Math.Abs(Angle) < pr.TWA && Math.Abs(Angle) > pb.TWA) // Reaching { TGTSPD.Val = NavPolar.GetTarget(Math.Abs(TWA.Average(Inst.BufHalfMin)), TWS.Average(Inst.BufHalfMin)); TGTSPD.SetValid(now); TGTTWA.Val = Math.Abs(TWA.Val); TGTTWA.SetValid(now); PERF.Val = SPD.Val / TGTSPD.Val; if (VMGWPT.Val < 0) { PERF.Val = -PERF.Val; } PERF.SetValid(now); sailingMode = SailingMode.Reaching; } if (Math.Abs(Angle) >= pr.TWA) // Running { TGTSPD.Val = pr.SPD; TGTSPD.SetValid(now); TGTTWA.Val = pr.TWA; TGTTWA.SetValid(now); PERF.Val = VMG.Val / (pr.SPD * Math.Cos(pr.TWA * Math.PI / 180)); PERF.SetValid(now); sailingMode = SailingMode.Running; } } else { if (TGTSPD.IsValid()) { TGTSPD.Invalidate(); } if (TGTTWA.IsValid()) { TGTTWA.Invalidate(); } if (PERF.IsValid()) { PERF.Invalidate(); } sailingMode = SailingMode.None; } #endregion #region Line if (p1_set && p2_set && LAT.IsValid() && HDT.IsValid()) { double p3_lat = LAT.Val, p3_lon = LON.Val; if (Properties.Settings.Default.GPSoffsetToBow != 0) { CalcPosition(LAT.Val, LON.Val, Properties.Settings.Default.GPSoffsetToBow, HDT.Val, ref p3_lat, ref p3_lon); } double brg32 = CalcBearing(p3_lat, p3_lon, p2_lat, p2_lon); double dst32 = CalcDistance(p3_lat, p3_lon, p2_lat, p2_lon); LINEDST.Val = dst32 * Math.Sin((linebrg - brg32) * Math.PI / 180); LINEDST.SetValid(now); } else { if (LINEDST.IsValid()) { LINEDST.Invalidate(); } } #endregion #region Route nav if (!bypassComm) { if (ActiveMark != null && DST.IsValid() && !ManOverBoard) { if (DST.Val <= Properties.Settings.Default.WptProximity) { (new SoundPlayer(@".\Sounds\BELL7.WAV")).PlaySync(); if (ActiveLeg != null) { if (ActiveLeg.NextLeg != null) { ActiveLeg = ActiveLeg.NextLeg; ActiveMark = ActiveLeg.ToMark; } else { ActiveMark = null; ActiveLeg = null; ActiveRoute = null; } } else { ActiveMark = null; } } } } if (ActiveRoute != null) { if (ActiveLeg.NextLeg != null && TWD.IsValid()) { NTWA.Val = TWD.Average(Inst.BufTwoMin) - ActiveLeg.NextLeg.Bearing; NTWA.SetValid(); } else { NTWA.Invalidate(); } } #endregion #region Laylines //if (DRIFT.IsValid() && PERF.IsValid() && TWD.IsValid()) //{ // double relset = SET.Average(Inst.BufTenMin) - TWD.Average(Inst.BufHalfMin); // double dxs = TGTSPD.Average(Inst.BufHalfMin) * Math.Cos(TGTTWA.Average(Inst.BufHalfMin) * Math.PI / 180) + DRIFT.Average(Inst.BufTenMin) * Math.Cos(relset * Math.PI / 180); // double dys = TGTSPD.Average(Inst.BufHalfMin) * Math.Sin(TGTTWA.Average(Inst.BufHalfMin) * Math.PI / 180) + DRIFT.Average(Inst.BufTenMin) * Math.Sin(relset * Math.PI / 180); // TGTCOGs.Val = Math.Atan2(dys, dxs) * 180 / Math.PI + TWD.Average(Inst.BufHalfMin); // TGTCOGs.SetValid(now); // TGTSOGs.Val = Math.Sqrt(dxs * dxs + dys * dys); // TGTSOGs.SetValid(now); // double dxp = TGTSPD.Average(Inst.BufHalfMin) * Math.Cos(-TGTTWA.Average(Inst.BufHalfMin) * Math.PI / 180) + DRIFT.Average(Inst.BufTenMin) * Math.Cos(relset * Math.PI / 180); // double dyp = TGTSPD.Average(Inst.BufHalfMin) * Math.Sin(-TGTTWA.Average(Inst.BufHalfMin) * Math.PI / 180) + DRIFT.Average(Inst.BufTenMin) * Math.Sin(relset * Math.PI / 180); // TGTCOGp.Val = Math.Atan2(dyp, dxp) * 180 / Math.PI + TWD.Average(Inst.BufHalfMin); // TGTCOGp.SetValid(now); // TGTSOGp.Val = Math.Sqrt(dxp * dxp + dyp * dyp); // TGTSOGp.SetValid(now); //} //else //{ // if (TGTCOGs.IsValid()) // TGTCOGs.Invalidate(); // if (TGTSOGs.IsValid()) // TGTSOGs.Invalidate(); // if (TGTCOGp.IsValid()) // TGTCOGp.Invalidate(); // if (TGTSOGp.IsValid()) // TGTSOGp.Invalidate(); //} #endregion }
/// <summary> /// 确定 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { if (textBox1.Text != "" || textBox2.Text != "" || textBox3.Text != "" || textBox4.Text != "" || textBox5.Text != "" || textBox6.Text != "" || textBox7.Text != "" || textBox8.Text != "" || textBox9.Text != "") { try { TimeSpan t = new TimeSpan(); Random rd = new Random(); DateTime dt1 = Convert.ToDateTime(dtStart.Value.ToString("yyyy/MM/dd HH:mm")); DateTime dt2 = Convert.ToDateTime(dtEnd.Value.ToString("yyyy/MM/dd HH:mm")); int JGs = Convert.ToInt32(jiange); t = dt2 - dt1; string NIBPS; //收缩压 string NIBPD; //舒张压 string RRC; //呼吸 //int HR;//心率 string Pulse; //脉搏 string SpO2; //血氧 string ETCO2; //呼吸二氧化碳 string TEMP; //温度 string BIS; //bis string cvp; int X = (t.Days * 24 * 60 + t.Hours * 60 + t.Minutes) / JGs; for (int i = 0; i <= X; i++) { NIBPS = textBox1.Text; NIBPD = textBox2.Text; RRC = textBox3.Text; //HR = new Random().Next(31, 35); Pulse = textBox4.Text; SpO2 = textBox5.Text; ETCO2 = textBox6.Text; TEMP = textBox7.Text; BIS = textBox8.Text; cvp = textBox9.Text; if (bll.GetPointSingle(Mzjldid, dt1).Rows.Count == 0) { int result = bll.AddPoint(Mzjldid, dt1, NIBPS.ToString(), NIBPD.ToString(), RRC.ToString(), Pulse.ToString(), SpO2.ToString(), ETCO2.ToString(), BIS.ToString(), TEMP.ToString(), cvp); } //else // MessageBox.Show("该时间点数据已存在,不能重复添加"); dt1 = dt1.AddMinutes(JGs); } MessageBox.Show("设置完成"); this.Close(); } catch (Exception ex) { MessageBox.Show("设置失败!请重试!"); } } else { MessageBox.Show("如果没有数据请填写0"); } }
private void button3_Click(object sender, EventArgs e) { try { TimeSpan t = new TimeSpan(); Random rd = new Random(); DateTime dt1 = Convert.ToDateTime(dtStart.Value.ToString("yyyy/MM/dd HH:mm")); DateTime dt2 = Convert.ToDateTime(dtEnd.Value.ToString("yyyy/MM/dd HH:mm")); int JGs = Convert.ToInt32(jiange); t = dt2 - dt1; int NIBPS; //收缩压 int NIBPD; //舒张压 int RRC; //呼吸 //int HR;//心率 int Pulse; //脉搏 int SpO2; //血氧 int ETCO2; //呼吸二氧化碳 string TEMP; //温度 //string BIS;//bis //string cvp; int X = (t.Days * 24 * 60 + t.Hours * 60 + t.Minutes) / JGs; for (int i = 0; i <= X; i++) { NIBPS = new Random().Next(110, 120); NIBPD = new Random().Next(65, 70); RRC = new Random().Next(16, 20); //HR = new Random().Next(31, 35); Pulse = new Random().Next(70, 80); SpO2 = 100; ETCO2 = new Random().Next(31, 35); TEMP = "0"; if (bll.GetPointSinglePACU(Mzjldid, dt1).Rows.Count == 0) { int result = bll.AddPointmenzhen(Mzjldid, dt1, NIBPS.ToString(), NIBPD.ToString(), RRC.ToString(), Pulse.ToString(), SpO2.ToString(), ETCO2.ToString(), TEMP.ToString()); } //else // MessageBox.Show("该时间点数据已存在,不能重复添加"); dt1 = dt1.AddMinutes(JGs); } MessageBox.Show("设置完成"); this.Close(); } catch (Exception ex) { MessageBox.Show("设置失败!请重试!"); } }
public Exp TranslateSimpleVar(Access var, Level home) { Expr res = new TEMP(home.Frame.FP()); Level l = home; while (l != var.Home) { res = l.StaticLink().Acc.Exp(res); l = l.Parent; } return new Ex(var.Acc.Exp(res)); }
Temp.Temp TranslateExpr(TEMP expr) { return(expr.Temp); }
Temp.Temp TranslateExpr(TEMP expr) { return expr.Temp; }
private int currentWaypoint = 0; // Current waypoint void Start() { startingPosition = gameObject.transform.position; startingDirection = forward; if (moveSpeed <= 0) // using the MoveTwords function does not allow for negative numbers { print("MovingPlatform.cs ERROR - (moveSpeed = " + moveSpeed + ") is set below 0. This script does not take negative numbers. moveSpeed is now set to 1f"); moveSpeed = 1; } if (GetComponent <Rigidbody2D>() != null) { GetComponent <Rigidbody2D>().isKinematic = true; } if (showLineRendering) // If line rendering was selected - set it up { gameObject.GetComponent <SpriteRenderer> ().sortingOrder = 1; LineRenderer TEMP; for (int I = 0; I < wayPoints.Length - 1; I++) { TEMP = wayPoints[I].gameObject.AddComponent <LineRenderer>(); TEMP.SetColors(firstColor, secondColor); TEMP.SetWidth(0.1F, 0.1F); TEMP.useWorldSpace = true; TEMP.material = new Material(Shader.Find("Particles/Additive")); TEMP.SetPosition(0, wayPoints[I].transform.position); TEMP.SetPosition(1, wayPoints[I + 1].transform.position); } if (fullLoop) { TEMP = wayPoints[(wayPoints.Length - 1)].gameObject.AddComponent <LineRenderer>(); TEMP.SetColors(firstColor, secondColor); TEMP.SetWidth(0.1F, 0.1F); TEMP.useWorldSpace = true; TEMP.SetPosition(0, wayPoints[(wayPoints.Length - 1)].transform.position); TEMP.material = new Material(Shader.Find("Particles/Additive")); TEMP.SetPosition(1, wayPoints[0].transform.position); } } if (startingIndex < 0) { startingIndex = 0; } if (startingIndex > wayPoints.Length - 1) { startingIndex = wayPoints.Length - 1; } currentWaypoint = startingIndex; if (restartOnReset) { EventManager.resetObjects += Reset; } if (enableOnStart) { Start_Machine(); } }
public void CalcNav(DateTime now, bool bypassComm = false) { sailingMode = SailingMode.None; #region Primitives if (rmc_received || bypassComm) { LAT.Val = lat; LON.Val = lon; SOG.Val = sog; COG.Val = cog; LAT.SetValid(now); LON.SetValid(now); SOG.SetValid(now); COG.SetValid(now); RMC_received_Timer.Start(); } if (vhw_received || bypassComm) { SPD.Val = spd; SPD.SetValid(now); } if (dpt_received || bypassComm) { DPT.Val = dpt; DPT.SetValid(now); } if (mwv_received || bypassComm) { AWA.Val = awa; AWS.Val = aws; AWA.SetValid(now); AWS.SetValid(now); } if (mtw_received || bypassComm) { TEMP.Val = temp; TEMP.SetValid(now); } if (hdg_received || bypassComm) { double mv = Properties.Settings.Default.MagVar; //default if (mvar2 != 0) { mv = mvar2; //From HDG } if (mvar1 != 0) { mv = mvar1; //From RMC } MVAR.Val = mv; MVAR.SetValid(now); if (bypassComm) { mv = 0; // heading from log file is "true heading" no need for correction } HDT.Val = hdg + mv; HDT.SetValid(now); } #endregion #region Position, Leg bearing, distance, XTE and VMG if (LAT.IsValid() && LON.IsValid()) { POS.Val.Latitude = LAT.Val; POS.Val.Longitude = LON.Val; POS.SetValid(now); } else { POS.Invalidate(); } if (ActiveLeg != null) { LWLAT.Val = ActiveLeg.FromLocation.Latitude; LWLAT.SetValid(now); LWLON.Val = ActiveLeg.FromLocation.Longitude; LWLON.SetValid(now); LWPT.Val.str = ActiveLeg.FromMark.Name; LWPT.SetValid(now); } else { LWLAT.Invalidate(); LWLON.Invalidate(); LWPT.Invalidate(); } if (!bypassComm || replayLog) { if (ActiveMark != null && POS.IsValid()) { WLAT.Val = ActiveMark.Location.Latitude; WLAT.SetValid(now); WLON.Val = ActiveMark.Location.Longitude; WLON.SetValid(now); WPT.Val.str = ActiveMark.Name; WPT.SetValid(now); BRG.Val = CalcBearing(LAT.Val, LON.Val, WLAT.Val, WLON.Val); BRG.SetValid(now); DST.Val = CalcDistance(LAT.Val, LON.Val, WLAT.Val, WLON.Val) / 1852; DST.SetValid(now); } else { WLAT.Invalidate(); WLON.Invalidate(); WPT.Invalidate(); BRG.Invalidate(); DST.Invalidate(); } } if (WPT.IsValid() && LWPT.IsValid()) { LEGBRG.Val = CalcBearing(LWLAT.Val, LWLON.Val, WLAT.Val, WLON.Val); LEGBRG.SetValid(now); } else { if (LEGBRG.IsValid()) { LEGBRG.Invalidate(); } } if (LWPT.IsValid()) { XTE.Val = Math.Asin(Math.Sin(DST.Val * 1.852 / 6371) * Math.Sin((BRG.Val - LEGBRG.Val) * Math.PI / 180)) * 6371 / 1.852; XTE.SetValid(now); } else if (XTE.IsValid()) { XTE.Invalidate(); } if (SOG.IsValid() && BRG.IsValid() && WPT.IsValid()) { VMGWPT.Val = SOG.Val * Math.Cos((COG.Val - BRG.Val) * Math.PI / 180); VMGWPT.SetValid(now); } else { if (VMGWPT.IsValid()) { VMGWPT.Invalidate(); } } #endregion #region True Wind if (AWA.IsValid() && SPD.IsValid()) { double Dx = AWS.Val * Math.Cos(AWA.Val * Math.PI / 180) - SPD.Val; double Dy = AWS.Val * Math.Sin(AWA.Val * Math.PI / 180); TWS.Val = Math.Sqrt(Dx * Dx + Dy * Dy); TWS.SetValid(now); TWA.Val = Math.Atan2(Dy, Dx) * 180 / Math.PI; TWA.SetValid(now); VMG.Val = SPD.Val * Math.Cos(TWA.Val * Math.PI / 180); VMG.SetValid(now); //Set estimated saling mode in case route and/or performance data is not available if (Math.Abs(TWA.Val) < 55) { sailingMode = SailingMode.Beating; } else if (Math.Abs(TWA.Val) > 130) { sailingMode = SailingMode.Running; } else { sailingMode = SailingMode.Reaching; } } else { if (TWS.IsValid()) { TWS.Invalidate(); } if (TWA.IsValid()) { TWA.Invalidate(); } if (VMG.IsValid()) { VMG.Invalidate(); } } if (TWS.IsValid() && HDT.IsValid()) { TWD.Val = HDT.Val + TWA.Val; TWD.SetValid(now); } else { if (TWD.IsValid()) { TWD.Invalidate(); } } #endregion #region Leeway if (AWA.IsValid() && SPD.IsValid() && LWay.IsAvailable() && Properties.Settings.Default.EstimateLeeway) { LWY.Val = LWay.Get(AWA.Val, AWS.Val, SPD.Val); LWY.SetValid(now); } #endregion #region Heel //if (AWA.IsValid() && SPD.IsValid()) //{ // double k = 7, // a = 2, // b = 200, // c = 1.5; // var awa = Math.Abs(AWA.Val); // var aws = AWS.Val; // HEEL.Val = k * awa * Math.Pow(aws, c) / (Math.Pow(awa, a) + b); // if (HEEL.Val > 45) HEEL.Val = 45; // HEEL.SetValid(now); //} //else //{ // if (HEEL.IsValid()) // HEEL.Invalidate(); //} #endregion #region Drift if (SOG.IsValid() && COG.IsValid() && HDT.IsValid() && SPD.IsValid()) { double Dx = SOG.Val * Math.Cos(COG.Val * Math.PI / 180) - SPD.Val * Math.Cos(HDT.Val * Math.PI / 180); double Dy = SOG.Val * Math.Sin(COG.Val * Math.PI / 180) - SPD.Val * Math.Sin(HDT.Val * Math.PI / 180); if (LWY.IsValid()) { double lwy; if (AWA.Val < 0) { lwy = -LWY.Val; } else { lwy = LWY.Val; } double lm = SPD.Val * Math.Tan(lwy * Math.PI / 180); double la = HDT.Val - 90; double lx = lm * Math.Cos(la * Math.PI / 180); double ly = lm * Math.Sin(la * Math.PI / 180); double ang = Math.Atan2(ly, lx) * 180 / Math.PI; Dx -= lx; Dy -= ly; } DRIFT.Val = Math.Sqrt(Dx * Dx + Dy * Dy); DRIFT.SetValid(now); SET.Val = Math.Atan2(Dy, Dx) * 180 / Math.PI; SET.SetValid(now); } else { if (DRIFT.IsValid()) { DRIFT.Invalidate(); } if (SET.IsValid()) { SET.Invalidate(); } } #endregion #region Performance if (TWA.IsValid() && SPD.IsValid() && NavPolar.IsLoaded && BRG.IsValid()) { double Angle = Math.Abs(TWD.Val - BRG.Val + 360) % 360; if (Angle > 180) { Angle = 360 - Angle; } PolarPoint pb = NavPolar.GetBeatTargeInterpolated(TWS.Val); PolarPoint pr = NavPolar.GetRunTargetInterpolated(TWS.Val); if (Angle <= (pb.TWA + 20)) // Beating { TGTSPD.Val = pb.SPD; TGTSPD.SetValid(now); TGTTWA.Val = pb.TWA; TGTTWA.SetValid(now); PERF.Val = VMG.Val / (pb.SPD * Math.Cos(pb.TWA * Math.PI / 180)); PERF.SetValid(now); sailingMode = SailingMode.Beating; } if (Angle < (pr.TWA - 20) && Angle > (pb.TWA + 20)) // Reaching { TGTSPD.Val = NavPolar.GetTargeInterpolated(Math.Abs(TWA.Val), TWS.Val); TGTSPD.SetValid(now); TGTTWA.Val = Math.Abs(TWA.Val); TGTTWA.SetValid(now); PERF.Val = Math.Abs(SPD.Val * Math.Cos((COG.Val - BRG.Val) * Math.PI / 180) / TGTSPD.Val); PERF.SetValid(now); sailingMode = SailingMode.Reaching; } if (Angle >= (pr.TWA - 20)) // Running { TGTSPD.Val = pr.SPD; TGTSPD.SetValid(now); TGTTWA.Val = pr.TWA; TGTTWA.SetValid(now); PERF.Val = VMG.Val / (pr.SPD * Math.Cos(pr.TWA * Math.PI / 180)); PERF.SetValid(now); sailingMode = SailingMode.Running; } } else { if (TGTSPD.IsValid()) { TGTSPD.Invalidate(); } if (TGTTWA.IsValid()) { TGTTWA.Invalidate(); } if (PERF.IsValid()) { PERF.Invalidate(); } } #endregion #region Line if (p1_set && p2_set && LAT.IsValid() && HDT.IsValid()) { double p3_lat = LAT.Val, p3_lon = LON.Val; if (Properties.Settings.Default.GPSoffsetToBow != 0) { CalcPosition(LAT.Val, LON.Val, Properties.Settings.Default.GPSoffsetToBow, HDT.Val, ref p3_lat, ref p3_lon); } double brg32 = CalcBearing(p3_lat, p3_lon, p2_lat, p2_lon); double dst32 = CalcDistance(p3_lat, p3_lon, p2_lat, p2_lon); LINEDST.Val = dst32 * Math.Sin((linebrg - brg32) * Math.PI / 180); LINEDST.SetValid(now); } else { if (LINEDST.IsValid()) { LINEDST.Invalidate(); } } #endregion #region Route nav if (ActiveMark != null && DST.IsValid() && !ManOverBoard) { if (DST.Val <= Properties.Settings.Default.WptProximity && ActiveMark != MOB) { (new SoundPlayer(@".\Sounds\BELL7.WAV")).PlaySync(); if (ActiveLeg != null) { if (ActiveLeg.NextLeg != null) { ActiveLeg = ActiveLeg.NextLeg; ActiveMark = ActiveLeg.ToMark; } else { ActiveMark = null; ActiveLeg = null; ActiveRoute = null; } } else { ActiveMark = null; } } } if (ActiveRoute != null) { if (ActiveLeg.NextLeg != null && TWD.IsValid()) { NTWA.Val = TWD.Val - ActiveLeg.NextLeg.Bearing; NTWA.SetValid(now); } else { NTWA.Invalidate(); } } #endregion #region Laylines insideCourse = false; // Need to determine later if (DRIFT.IsValid() && PERF.IsValid() && TWD.IsValid()) { double ttwa = TGTTWA.Val; double tgtlwy = 0; if (LWY.IsValid()) { double awx = TWS.Val * Math.Cos(ttwa * Math.PI / 180) + TGTSPD.Val; double awy = TWS.Val * Math.Sin(ttwa * Math.PI / 180); double tgtawa = Math.Atan2(awy, awx) * 180 / Math.PI; double tgtaws = Math.Sqrt(awx * awx + awy * awy); tgtlwy = LWay.Get(tgtawa, tgtaws, TGTSPD.Val); } ttwa += tgtlwy; if (ttwa > 180) { ttwa = 180; } double relset = SET.Val - TWD.Val; double dxs = TGTSPD.Val * Math.Cos(ttwa * Math.PI / 180) + DRIFT.Val * Math.Cos(relset * Math.PI / 180); double dys = TGTSPD.Val * Math.Sin(ttwa * Math.PI / 180) + DRIFT.Val * Math.Sin(relset * Math.PI / 180); TGTCOGp.Val = Math.Atan2(dys, dxs) * 180 / Math.PI + TWD.Val; TGTCOGp.SetValid(now); TGTSOGp.Val = Math.Sqrt(dxs * dxs + dys * dys); TGTSOGp.SetValid(now); double dxp = TGTSPD.Val * Math.Cos(-ttwa * Math.PI / 180) + DRIFT.Val * Math.Cos(relset * Math.PI / 180); double dyp = TGTSPD.Val * Math.Sin(-ttwa * Math.PI / 180) + DRIFT.Val * Math.Sin(relset * Math.PI / 180); TGTCOGs.Val = Math.Atan2(dyp, dxp) * 180 / Math.PI + TWD.Val; TGTCOGs.SetValid(now); TGTSOGs.Val = Math.Sqrt(dxp * dxp + dyp * dyp); TGTSOGs.SetValid(now); // Determine if sailing inside course +/- 0 degrees double a1 = (BRG.Val - TGTCOGs.Val - 0 + 360) % 360; double a2 = (TGTCOGp.Val - 0 - TGTCOGs.Val + 360) % 360; switch (sailingMode) { case SailingMode.Beating: if (a1 < a2) { insideCourse = true; } break; case SailingMode.Running: if (a2 < a1) { insideCourse = true; } break; } // Calculate Layline hit points if (ActiveMark != null) { double alpha = (TGTCOGp.Val - BRG.Val + 360) % 360; double beta = (BRG.Val - TGTCOGs.Val + 360) % 360; double dist_s, dist_p; if (alpha == 0) { dist_p = DST.Val; dist_s = 0; } else { if (beta == 0) { dist_s = DST.Val; dist_p = 0; } else { dist_p = DST.Val * Math.Sin(beta * Math.PI / 180) / (Math.Sin(alpha * Math.PI / 180) * Math.Cos(beta * Math.PI / 180) + Math.Cos(alpha * Math.PI / 180) * Math.Sin(beta * Math.PI / 180)); dist_s = DST.Val * Math.Sin(alpha * Math.PI / 180) / (Math.Sin(alpha * Math.PI / 180) * Math.Cos(beta * Math.PI / 180) + Math.Cos(alpha * Math.PI / 180) * Math.Sin(beta * Math.PI / 180)); } } DSTLYLp.Val = dist_p * 1852; DSTLYLp.SetValid(now); DSTLYLs.Val = dist_s * 1852; DSTLYLs.SetValid(now); double xx = DSTLYLp.Val / TGTSOGp.Val * 3600 / 1852; if (xx > TimeSpan.MaxValue.TotalHours) { xx = TimeSpan.MaxValue.TotalHours - 1; } if (xx < TimeSpan.MinValue.TotalHours) { xx = TimeSpan.MinValue.TotalHours + 1; } TTGLYLp.Val = TimeSpan.FromSeconds(xx); TTGLYLp.SetValid(now); xx = DSTLYLs.Val / TGTSOGs.Val * 3600 / 1852; if (xx > TimeSpan.MaxValue.TotalHours) { xx = TimeSpan.MaxValue.TotalHours - 1; } if (xx < TimeSpan.MinValue.TotalHours) { xx = TimeSpan.MinValue.TotalHours + 1; } TTGLYLs.Val = TimeSpan.FromSeconds(xx); TTGLYLs.SetValid(now); } } else { if (TGTCOGp.IsValid()) { TGTCOGp.Invalidate(); } if (TGTSOGp.IsValid()) { TGTSOGp.Invalidate(); } if (TGTCOGs.IsValid()) { TGTCOGs.Invalidate(); } if (TGTSOGs.IsValid()) { TGTSOGs.Invalidate(); } if (DSTLYLp.IsValid()) { DSTLYLp.Invalidate(); } if (DSTLYLs.IsValid()) { DSTLYLs.Invalidate(); } } #endregion if (replayLog == true) { if (deltaLog == TimeSpan.Zero) { //deltaLog = now - new DateTime(2020, 03, 15); deltaLog = now - DateTime.Now; } now = now - deltaLog; } PushToLogDB(now); }