public List <str> Kurisutina() { MySqlCommand command = Connection.CreateCommand(); command.CommandText = "SELECT uwu.id,`surname`, `name`, `otch`,`work`,`salary` FROM a1caida.uwu JOIN a1caida.owo ON uwu.id_fio = owo.id"; List <str> bd = new List <str>(); try { // Connection.Open(); using (DbDataReader reader = command.ExecuteReader()) { while (reader.Read()) { str databd = new str { id = reader.GetString(0), familia = reader.GetString(1), imya = reader.GetString(2), otchestvo = reader.GetString(3), rabota = reader.GetString(4), zarplata = reader.GetString(5), }; bd.Add(databd); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } return(bd); }
public List <str> lol() { MySqlCommand command = Connection.CreateCommand(); command.CommandText = "SELECT `id`,`surname`, `name`, `otch` FROM a1caida.owo"; //command.Parameters.AddWithValue("@id", id); List <str> bd = new List <str>(); try { Connection.Open(); using (DbDataReader reader = command.ExecuteReader()) { while (reader.Read()) { str databd = new str { id = reader.GetString(0), familia = reader.GetString(1), imya = reader.GetString(2), otchestvo = reader.GetString(3), }; bd.Add(databd); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } return(bd); }
// #define addrfmt(x, s) x.fmt(s, sizeof(s)) cstr fmt(str s, size_t len) { memset(s, 0, len); byte family = get_family(); str i; if (family == AF_INET) { INET_NTOP(family, (uint32 *)&_sin4, s, len); i = s; while (*++i) { } } else { i = s; *i++ = '['; INET_NTOP(family, (in6_addr *)&_in._in6addr, i, len - 1); while (*++i) { } *i++ = ']'; } snprintf(i, len - (i - s), ":%u", _port); return(s); }
public static void Main(Args _args) { try { str tenant = "XXXXXXX"; str serviceResourceId = "X-X-X-X-X"; str clientId = "X-X-X-X-X"; str appKey = "XXXXXXX"; str functionURL = "https://XXXXXXX.azurewebsites.net/api/HttpTrigger1?code=XXXXXXX=="; functionURL += "&name=Dag"; // Must use 'var' instead of 'System.Threading.Tasks.Task<System.String>' because of the F&O compiler var t = PLUtilities.AzureFunctionHelper::authAndCallFunction(tenant, serviceResourceId, clientId, appKey, functionURL); t.Wait(); str s = t.Result; info(s); } catch (Exception::CLRError) { System.Exception ex = ClrInterop::getLastException(); if (ex != null) { ex = ex.get_InnerException(); if (ex != null) { error(ex.ToString()); } } } }
private void Form1_Load(object sender, EventArgs e) { for (int i = 0; i < 5; i++) { str st = new str(); st.auto = new Thread(threadAuto); st.velocita = rnd.Next(5, 30); st.ar = false; st.pos = i + 1; switch (i) { case 0: st.pb = pictureBox1; break; case 1: st.pb = pictureBox2; break; case 2: st.pb = pictureBox3; break; case 3: st.pb = pictureBox4; break; case 4: st.pb = pictureBox5; break; } lst.Add(st); } }
public Schematic Find(str path) { if (!str.IsNullOrEmpty(path)) { return(Find(path.ToString())); } return(null); }
static void Main() { Console.WriteLine("What's your name?"); str input = Console.ReadLine(); Console.WriteLine($"Hello, {input}!"); Console.ReadLine(); }
// Used to extract last portion of a string which can be split using given separator // (e.g. "/Script/FactoryGame.FGInventoryComponent" -> "FGInventoryComponent") public static string LastName(this str name, char separator = '.') { if (str.IsNullOrEmpty(name)) { return(null); } return(LastName(name.ToString(), separator)); }
public static Item Find(str path) { if (!str.IsNullOrEmpty(path)) { return(Find(path.ToString())); } return(null); }
public static BitmapSource GetImage(str object_name, int desired_resolution, VersionTable.Version version) { if (object_name == null) { return(null); } return(GetImage(object_name.ToString(), desired_resolution, version)); }
public Research Find(str path) { if (!str.IsNullOrEmpty(path)) { return(Find(path.ToString())); } return(null); }
public str diff(str x1, str x2) { str res; res.x = x1.x - x2.x; res.y = x1.y - x2.y; res.z = x1.z - x2.z; return(res); }
public double angle(str x1, str x2) { double sum = x1.x * x2.x + x1.y * x2.y + x1.z * x2.z; double n1 = Math.Sqrt(x1.x * x1.x + x1.y * x1.y + x1.z * x1.z); double n2 = Math.Sqrt(x2.x * x2.x + x2.y * x2.y + x2.z * x2.z); sum = Math.Acos(sum / (n1 * n2)) * 180 / Math.PI; return(sum); }
static void Main(string[] args) { char[] pip = { 'a', 'g', 'r' }; str CB1 = new str(); str CB2 = new str(pip); str CB3 = new str(CB2); CB3 *= 2; Console.WriteLine(CB3.getLine()); CB1 = CB2 + CB3; Console.WriteLine(CB1.getLine()); }
// Tries to get .Name from property passed, or null if property has no such value public static string GetName(this P.Property prop) { if (prop is P.ValueProperty) { str s = (prop as P.ValueProperty).Name; if (s != null) { return(s.ToString()); } } return(null); }
public static str operator *(str inputLine, int n) { str result = new str(inputLine.len() * n); for (int i = 0; i < inputLine.len(); i++) { for (int j = 0; j < n; j++) { result.line[n * i + j] = inputLine.line[i]; } } return(result); }
public static str operator +(str lineFirst, str lineSecond) { str result = new str(lineFirst.len() + lineSecond.len()); for (int i = 0; i < result.len(); i++) { if (i < lineFirst.len()) { result.line[i] = lineFirst.line[i]; } else { result.line[i] = lineSecond.line[i - lineFirst.len()]; } } return(result); }
// Complete the twoStrings function below. static string twoStrings(string s1, string s2) { Dictionary <char, int> strDictA = new Dictionary <char, int>(); Dictionary <char, int> strDictB = new Dictionary <char, int>(); str matchingChar = ""; for (var i = 0; i < s1.Length; i++) { if (strDictA.ContainsKey(s1[i])) { strDictA[s1[i]] += 1; } else { strDictA.Add(s1[i], 1); } } for (var j = 0; j < s2.Length; j++) { if (strDictB.Contains(s2[j])) { strDictB[s2[j]] += 1; } else { strDictB.Add(s2[j], 1); } } foreach (var pair in strDictA) { if (strDictB.ContainsKey(pair.Key)) { Console.WriteLine("Found a matching char: " + pair.Key); matchingChar += pair.Key; return("YES"); } else { Console.WriteLine("No match found"); } } Console.WriteLine("matchingChar: " + matchingChar); return("NO"); }
// Find a value property by name public static P.Property Named(this P.Properties props, string name, int index = -1) { if (index < 0) { int pos = name.IndexOf('#'); if (pos > 0) { string idx = name.Substring(pos + 1); name = name.Substring(0, pos); if (!int.TryParse(idx, out index)) { return(null); } } } if (index >= 0) { return(props.FirstOrDefault(prop => { if (prop is P.ValueProperty) { P.ValueProperty val = prop as P.ValueProperty; str prop_name = val.Name; if (!str.IsNullOrEmpty(prop_name)) { return (val.Index == index) && (prop_name.ToString() == name); } } return false; })); } return(props.FirstOrDefault(prop => { if (prop is P.ValueProperty) { str prop_name = (prop as P.ValueProperty).Name; if (!str.IsNullOrEmpty(prop_name)) { return prop_name.ToString() == name; } } return false; })); }
List <str> zarplata(int id) { MySqlConnectionStringBuilder stringBuilder = new MySqlConnectionStringBuilder(); stringBuilder.Server = "localhost"; stringBuilder.UserID = "root"; stringBuilder.Database = "zarplatalab"; stringBuilder.SslMode = MySqlSslMode.None; connections = new MySqlConnection(stringBuilder.ConnectionString); MySqlCommand command = connections.CreateCommand(); command.CommandText = "SELECT zarplata.id, `surname`, `name`, `otch`, `status` ,`money` FROM zarplatalab.zarplata JOIN zarplatalab.info ON zarplata.fio_id = info.id WHERE fio_id = @id"; command.Parameters.AddWithValue("@id", id); List <str> bd = new List <str>(); try { connections.Open(); using (DbDataReader reader = command.ExecuteReader()) { while (reader.Read()) { str databd = new str { id = reader.GetString(0), name = reader.GetString(1), surname = reader.GetString(2), otch = reader.GetString(3), status = reader.GetString(4), money = reader.GetString(5), }; bd.Add(databd); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } return(bd); }
public int mv(double a1, double a2, str c, int flag, int dir) { // this.semaphore3.Text = "in mv :zdiff = " + dir * (c.z-prev.z) ; int inval = flag; double tempval = Math.Abs(c.z - hip_center.z); if (a1 < 40 && a2 < 40 && tempval < 0.14) { if (dir == -1) { inval = 1; } else if (flag == 2) { inval = 3; } } if (a1 < 40 && a2 < 40 && tempval < 0.23 && tempval > 0.15) { if (dir == -1 && flag == 1) { inval = 2; } else if (flag == 1) { inval = 2; } } if (a1 < 40 && a2 < 40 && tempval > 0.23) { if (dir == -1 && flag == 2) { inval = 3; } else { inval = 1; } } return(inval); }
//************************************************************** List <str> information() { MySqlConnectionStringBuilder stringBuilder = new MySqlConnectionStringBuilder(); stringBuilder.Server = "localhost"; stringBuilder.UserID = "root"; stringBuilder.Database = "zarplatalab"; stringBuilder.SslMode = MySqlSslMode.None; connections = new MySqlConnection(stringBuilder.ConnectionString); MySqlCommand command = connections.CreateCommand(); command.CommandText = "SELECT id, name, surname, otch FROM zarplatalab.info"; List <str> bd = new List <str>(); try { connections.Open(); using (DbDataReader reader = command.ExecuteReader()) { while (reader.Read()) { str databd = new str { id = reader.GetString(0), name = reader.GetString(1), surname = reader.GetString(2), otch = reader.GetString(3), }; bd.Add(databd); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } return(bd); }
static void Main(string[] args) { str st1 = new str { firstname = "Jey", lastname = "Sel" }; str st2 = new str { firstname = "Jayden", lastname = "Had" }; Program.SwapValue <str>(ref st1, ref st2); Console.WriteLine("st1 values are {0}, {1}", st1.firstname, st1.lastname); Console.WriteLine("Hello World!"); GenQueue <int> genericQueue = new GenQueue <int>(); genericQueue.addToQueue(1); Console.WriteLine(genericQueue.getFromQueue()); }
public void BasicTest() { const string TestString = "test string"; str str1 = new str(TestString); // test constructor: Assert.AreEqual(str1.ToString(), TestString); // test directly assign string value str str2 = TestString; Assert.AreEqual(str2.ToString(), TestString); Assert.IsFalse(ReferenceEquals(str1, str2)); // test Equals Assert.IsTrue(str1.Equals(str2)); Assert.IsTrue(str1.Equals((object)str2)); // test == Assert.IsTrue(str1 == str2); // test != Assert.IsTrue(str1 != new str(TestString + " ")); // test + Assert.IsTrue(str1 + str1 == new str(TestString + TestString)); // test indexer Assert.AreEqual('e', str1[1]); str1[1] = 'E'; Assert.AreEqual(str1, "tEst string"); str1[1] = 'e'; // compare with built-in string Assert.IsTrue(str1.Equals(TestString)); }
private void threadAuto(object obj) { str s = (str)obj; while (!s.ar) { if (s.pb.Location.X > 900) { BeginInvoke((MethodInvoker) delegate() { s.ar = true; textBox1.Text += "macchina " + s.pos; }); } else { BeginInvoke((MethodInvoker) delegate() { s.pb.Left += s.velocita; }); Thread.Sleep(100); } } }
public override obj cast(str typename) { return nilsrc.nil; }
GetValueOrNull(int.TryParse(str, NumberStyles.Integer, SelectCulture(cultureInfo), out var parsedValue), parsedValue);
public int mv(double a1, double a2, str c, int flag, int dir) { // this.semaphore3.Text = "in mv :zdiff = " + dir * (c.z-prev.z) ; int inval = flag; double tempval = Math.Abs(c.z - hip_center.z); if (a1 < 40 && a2 < 40 && tempval < 0.14) { if (dir == -1) { inval = 1; } else if (flag == 2) { inval = 3; } } if (a1 < 40 && a2 < 40 && tempval < 0.23 && tempval > 0.15) { if (dir == -1 && flag == 1) { inval = 2; } else if (flag == 1) { inval = 2; } } if (a1 < 40 && a2 < 40 && tempval > 0.23) { if (dir == -1 && flag == 2) { inval = 3; } else { inval = 1; } } return inval; }
public override obj cast(str typename) { return undefinedsrc.undefined; }
public double angle(str x1, str x2) { double sum = x1.x * x2.x + x1.y * x2.y + x1.z * x2.z; double n1 = Math.Sqrt(x1.x * x1.x + x1.y * x1.y + x1.z * x1.z); double n2 = Math.Sqrt(x2.x * x2.x + x2.y * x2.y + x2.z * x2.z); sum = Math.Acos(sum / (n1 * n2)) * 180 / Math.PI; return sum; }
public str diff(str x1, str x2) { str res; res.x = x1.x - x2.x; res.y = x1.y - x2.y; res.z = x1.z - x2.z; return res; }
{ typeof(int), (str => (int)double.Parse(str, CultureInfo.InvariantCulture), 0) },
static protected (bool ok, float val) SingleParse(string str) => float.TryParse(str, _numberStyle, null, out float v) ? (true, v) : (false, 0);
BCLDebug.Trace("DATETIME", "[DATETIME] Lex({0})\tpos:{1}({2}), {3}, DS.{4}", Hex(str.Value),
str.Index, Hex(str.m_current), tokenType, dps);
void nui_DepthFrameReady(object sender, ImageFrameReadyEventArgs e) { PlanarImage Image = e.ImageFrame.Image; byte[] convertedDepthFrame = convertDepthFrame(Image.Bits); depth.Source = BitmapSource.Create( Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, convertedDepthFrame, Image.Width * 4); //++totalFrames; DateTime cur = DateTime.Now; /* if (cur.Subtract(lastTime) > TimeSpan.FromSeconds(1)) * { * int frameDiff = totalFrames - lastFrames; * lastFrames = totalFrames; * lastTime = cur; * // frameRate.Text = frameDiff.ToString() + " fps by team 16"; * } * / * /* */ str r_we = diff(r_wrist, r_elbow); str r_es = diff(r_elbow, r_shldr); str r_se = diff(r_shldr, r_elbow); str mid = diff(shldr_center, hip_center); str pln = diff(r_shldr, l_shldr); str r_wc = diff(shldr_center, r_wrist); str r_hw = diff(r_hand, r_wrist); str sl_sr = diff(l_shldr, r_shldr); str l_we = diff(l_wrist, l_elbow); str l_es = diff(l_elbow, l_shldr); str l_se = diff(l_shldr, l_elbow); str l_wc = diff(shldr_center, l_wrist); str l_hw = diff(l_hand, l_wrist); str r_pt; r_pt = r_wrist; r_pt.x = r_shldr.x; str l_pt; l_pt = l_wrist; l_pt.x = l_shldr.x; str r_req = diff(r_shldr, r_pt); str l_req = diff(l_shldr, l_pt); zin1 = angle(shldr_center, sl_sr); zin2 = angle(shldr_center, r_se); //double zvar = angle(shldr_center, r_es); double rx1 = angle(r_we, r_es); double rx2 = angle(r_es, mid); double rx3 = angle(r_se, r_we); double rx4 = angle(r_wc, pln); double rx5 = angle(r_wc, mid); double rx6 = angle(sl_sr, r_se); double rx8 = angle(r_we, mid); double rx7 = angle(r_we, pln); double rx9 = angle(r_es, pln); double rx10 = angle(r_req, mid); double lx1 = angle(l_we, l_es); double lx2 = angle(l_es, mid); double lx3 = angle(l_se, l_we); double lx4 = angle(l_wc, pln); double lx5 = angle(l_wc, mid); double lx6 = angle(sl_sr, l_se); double lx8 = angle(l_we, mid); double lx7 = angle(l_we, pln); double lx9 = angle(l_es, pln); double lx10 = angle(l_req, mid); //rm_fwd=c1(x1, x2+90,rm_fwd,1,zin1-zin2); //rm_bck = c1(x1, x2 + 90, rm_bck, -1,zin1-zin2); //rm_start = c1(x1,x2+90,rm_start,-1,Math.Abs(x9-90)); //rm_fwd = c1(x1-90,x3,rm_fwd,-1); //rm_bck = c1(x2 - 90, x3, rm_bck, 1); //r_rot = c1(x5 - 90, x4, r_rot, 1,0); //r_is = mv(x7 - 90, x8 - 90, r_wrist, r_is, -1); //r_rot = mv(x7 - 90, x8 - 90, r_wrist, r_rot, 1); //this.semaphore1.Text = "mv : 1st arg = " + (x7-90)+" 2rd arg = " + (x8-90) ; //this.semaphore2.Text = "r_mv = "+ r_is.ToString(); //this.semaphore3.Text = "zdiff = " + (r_wrist.z - hip_center.z); this.semaphore1.Text = "rx 2,9 :" + rx2 + " " + rx9 + " "; this.semaphore2.Text = "rx 7,3 : " + rx7 + " " + rx3; this.semaphore3.Text = "lx 2,9 :" + lx2 + " " + lx9; this.semaphore4.Text = "lx 7,3 : " + lx7 + " " + lx3; this.semaphore5.Text = "rx 8,lx 8 : " + rx8 + " " + lx8; //DECIDING THE MODE if (check(rx2 - 90, rx9, rx7 - 90, rx8) == 1) { //WHEN BOTH LEFT AND RIGHT HANDS ARE IN POSITION AS REQUIRED (GRIPPER MODE) mode = 3; lastFrames = 0; char x = (char)mode; this.serialPort.Write(x.ToString()); } else if (check(rx2 - 90, rx9 - 90, rx7 - 90, rx8) == 1) { //WHEN RIGHT HAND IS IN POSITION (LONG RANGE MODE) mode = 1; lastFrames = 0; char x = (char)mode; this.serialPort.Write(x.ToString()); } else if (check(lx2 - 90, lx9 - 90, lx7 - 90, lx8) == 1) { //WHEN LEFT HAND IS IN POSTION (FINE CONTROL MODE) mode = 2; lastFrames = 0; char x = (char)mode; this.serialPort.Write(x.ToString()); } else { //lastFrames=0; } this.semaphore.Text = "MODE : " + mode; //WHEN IN MODE 1 i.e. long range motion (* put if condition) if (mode == 1) { //FOR FORWARD MOTION if (check(rx2 - 90, rx9 - 90, rx7 - 90, rx8 - 90) == 1 && check(lx2 - 90, lx9 - 90, lx7 - 90, lx8 - 90) == 1) { //COMMUNICATE SIGNAL CORRESPONDING TO THIS this.semaphore.Text = "IN MODE 1 FORWARD MOTION DETECTED"; char x = (char)8; this.serialPort.Write(x.ToString()); lastFrames = 0; } //FOR STOP else if (check(rx2, rx9 - 90, rx7 - 90, rx8) == 1) { //STOP this.semaphore.Text = "STOP"; char x = (char)5; this.serialPort.Write(x.ToString()); lastFrames = 0; } else if (check(rx2 - 180, rx9 - 90, rx3 - 90, rx7 - 90) == 1 && check(lx2 - 180, lx9 - 90, lx3 - 90, lx7 - 90) == 1) { //BACK this.semaphore.Text = "BACK"; char x = (char)9; this.serialPort.Write(x.ToString()); lastFrames = 0; } //ANGLE ROTATION else if (check(rx2 - 90, 0, rx3 - 180, rx8 - 90) == 1) { //SEND ANGLE BETWEEN HAND AND PLN curangle = rx9; if (lastFrames == 0) { initangle = curangle; } lastFrames++; this.semaphore.Text = "IN MODE 1 ANGLE DETECTION : " + send + " s : " + s.ToString(); if (lastFrames >= totalFrames) { send = -(Convert.ToInt32(curangle) - Convert.ToInt32(initangle)); if (send < 10 && send > -10) { send = 0; } if (send < 0) { send = 45 - send; } send += 10; s = (char)send; this.serialPort.Write(s.ToString()); lastFrames = 0; } } else { lastFrames = 0; } } //WHEN IN MODE 2 else if (mode == 2) { if (check(rx8 - 90, rx7 - 90, rx9 - 90, 0) == 1 && check(lx8 - 90, lx7 - 90, lx9 - 90, 0) == 1) { //RETURN L_WRIST.Z,R_WRIST.Z this.semaphore.Text = "IN MODE 2 : " + r_wrist.z; } } //WHEN IN MODE 3 else if (mode == 3) { if (check(rx3 - 180, 0, 0, 0) == 1 && check(lx3 - 180, 0, 0, 0) == 1) { lastFrames++; //RETURN rx10,lx10; //RETURN rx9,lx9 if (lastFrames >= totalFrames) { lastFrames = 0; if (rx10 > 90) { rx10 = 90; } int send = Convert.ToInt32(rx10 * (9.0 / 10) + 30); char x = (char)send; this.serialPort.Write(x.ToString()); if (rx9 > 90) { rx9 = 90; } send = Convert.ToInt32(rx9 * (4.0 / 9) + 80); x = (char)send; this.serialPort.Write(x.ToString()); } this.semaphore.Text = "IN MODE 3 : rx9,10" + rx9 + " " + rx10; } } }
// This function turns on the heater coils according to the string // parameter passed to it. Usable string parameters are: "all", "0", // "1", "2", and "none"; "all" and "none" turn on/off all the coils, // while "0", "1", "2" turns on the coil corresponding to that channel // output from the USB-TC device. private void TC_channel_out(str channel) { MccBoard daq = new MccDaq.MccBoard(BoardNum); MccDaq.ErrorInfo RetVal; for (int i = 0; i < 6; i++) { RetVal = daq.DConfigBit(DigitalPortType.AuxPort, i, DigitalPortDirection.DigitalOut); IsError(this,RetVal,true); } switch (channel) { case "all_coils": for (int i = 0; i < 3; i++) { RetVal = daq.DBitOut(DigitalPortType.AuxPort, i, DigitalLogicState.High); IsError(this,RetVal, true); } break; case "no_coils": for (int i = 0; i < 3; i++) { RetVal = daq.DBitOut(DigitalPortType.AuxPort, i, DigitalLogicState.Low); IsError(this,RetVal, true); } break; case "no_air": for (int i = 3; i < 6; i++) { RetVal = daq.DBitOut(DigitalPortType.AuxPort, i, DigitalLogicState.Low); IsError(this,RetVal, true); } break; case "inner": RetVal = daq.DBitOut(DigitalPortType.AuxPort, 0, DigitalLogicState.High); IsError(this,RetVal, true); break; case "sample_zone": RetVal = daq.DBitOut(DigitalPortType.AuxPort, 1, DigitalLogicState.High); IsError(this,RetVal, true); break; case "outer": RetVal = daq.DBitOut(DigitalPortType.AuxPort, 2, DigitalLogicState.High); IsError(this,RetVal, true); break; case "high_n2": RetVal = daq.DBitOut(DigitalPortType.AuxPort, 3, DigitalLogicState.High); IsError(this, RetVal, true); break; case "air": RetVal = daq.DBitOut(DigitalPortType.AuxPort, 4, DigitalLogicState.High); IsError(this, RetVal, true); break; case "low_n2": RetVal = daq.DBitOut(DigitalPortType.AuxPort, 5, DigitalLogicState.High); IsError(this, RetVal, true); break; default: RetVal = new ErrorInfo(1); MessageBox.Show("TC_channel_out() called with invalid parameter!", " " + "ERROR!"); break; } RetVal = daq.DConfigBit(DigitalPortType.AuxPort, 0, DigitalPortDirection.DigitalOut); if (IsError(this, RetVal, true) == 0) { MessageBox.Show("TC_out function error!"); return; } }
public double comp(str s1, str s2) { double nor = Math.Sqrt(s1.x * s1.x + s1.y * s1.y + s1.z * s1.z); return((s1.x * s2.x + s1.y * s2.y + s1.z * s2.z) / nor); }
PidgeonLogger.LogMessage(str);
public double comp(str s1, str s2) { double nor = Math.Sqrt(s1.x * s1.x + s1.y * s1.y + s1.z * s1.z); return (s1.x * s2.x + s1.y * s2.y + s1.z * s2.z) / nor; }