public void PointOnDivLineSide2() { var random = new Random(666); for (var i = 0; i < 1000; i++) { var startY = +1 + 666 * random.NextDouble(); var endY = -1 - 666 * random.NextDouble(); var pointY = 666 * random.NextDouble() - 333; var frontSideX = -1 - 666 * random.NextDouble(); var backSideX = -frontSideX; var vertex1 = new Vertex(Fixed.Zero, Fixed.FromDouble(startY)); var vertex2 = new Vertex(Fixed.Zero, Fixed.FromDouble(endY - startY)); var line = new LineDef( vertex1, vertex2, 0, 0, 0, null, null); var divLine = new DivLine(); divLine.MakeFrom(line); var y = Fixed.FromDouble(pointY); { var x = Fixed.FromDouble(frontSideX); Assert.AreEqual(0, Geometry.PointOnDivLineSide(x, y, divLine)); } { var x = Fixed.FromDouble(backSideX); Assert.AreEqual(1, Geometry.PointOnDivLineSide(x, y, divLine)); } } }
public void Initialize() { IsActive = true; StartPoint = 0; StartPointText.text = LocaleManager.instance.GetLocaleText("creator_auto"); NoteSpeed = 1.0f; SpeedText.text = NoteSpeed.ToString("N1"); ScopeVal = 1.0f; ScopeText.text = (ScopeVal * 100).ToString("N0") + "%"; DivLine = 8; DivArrayIndex = 5; DivLineText.text = DivLine.ToString(); ViewSpecific = false; ViewSpecificBtn.targetGraphic.color = GlobalTheme.ThemeColor(); ViewSpecificBtn.gameObject.GetComponentInChildren <Text>().color = GlobalTheme.ThemeContrastColor(); RText.text = NoteColorR.ToString(); GText.text = NoteColorG.ToString(); BText.text = NoteColorB.ToString(); ColorPanel.color = new Color32(NoteColorR, NoteColorG, NoteColorB, 255); LevelSelect(LevelVal); ChangeLine(MaxLine); SelectNoteMode(0); SelectFlickMode(0); ChangeBeats(BeatVal); ChangeSize(1); PlaceModeChanged(0); Player.Clean(); MetadataMode = false; ShowMetadata(); }
public void DivLineSide3() { var random = new Random(666); for (var i = 0; i < 1000; i++) { var startX = -1 - 666 * random.NextDouble(); var endX = +1 + 666 * random.NextDouble(); var pointX = 666 * random.NextDouble() - 333; var frontSideY = -1 - 666 * random.NextDouble(); var backSideY = -frontSideY; for (var j = 0; j < 100; j++) { var theta = 2 * Math.PI * random.NextDouble(); var ox = 666 * random.NextDouble() - 333; var oy = 666 * random.NextDouble() - 333; var vertex1 = new Vertex( Fixed.FromDouble(ox + startX * Math.Cos(theta)), Fixed.FromDouble(oy + startX * Math.Sin(theta))); var vertex2 = new Vertex( vertex1.X + Fixed.FromDouble((endX - startX) * Math.Cos(theta)), vertex1.Y + Fixed.FromDouble((endX - startX) * Math.Sin(theta))); var line = new LineDef( vertex1, vertex2, 0, 0, 0, null, null); var divLine = new DivLine(); divLine.MakeFrom(line); var node = new Node( Fixed.FromDouble(ox + startX * Math.Cos(theta)), Fixed.FromDouble(oy + startX * Math.Sin(theta)), Fixed.FromDouble((endX - startX) * Math.Cos(theta)), Fixed.FromDouble((endX - startX) * Math.Sin(theta)), Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero, 0, 0); { var x = Fixed.FromDouble(ox + pointX * Math.Cos(theta) - frontSideY * Math.Sin(theta)); var y = Fixed.FromDouble(oy + pointX * Math.Sin(theta) + frontSideY * Math.Cos(theta)); Assert.AreEqual(0, Geometry.DivLineSide(x, y, divLine)); Assert.AreEqual(0, Geometry.DivLineSide(x, y, node)); } { var x = Fixed.FromDouble(ox + pointX * Math.Cos(theta) - backSideY * Math.Sin(theta)); var y = Fixed.FromDouble(oy + pointX * Math.Sin(theta) + backSideY * Math.Cos(theta)); Assert.AreEqual(1, Geometry.DivLineSide(x, y, divLine)); Assert.AreEqual(1, Geometry.DivLineSide(x, y, node)); } } } }
/// <summary> /// Calculate on which side of the line the point is. /// </summary> /// <returns> /// 0 (front) or 1 (back). /// </returns> public static int PointOnDivLineSide(Fixed x, Fixed y, DivLine line) { if (line.Dx == Fixed.Zero) { if (x <= line.X) { return(line.Dy > Fixed.Zero ? 1 : 0); } else { return(line.Dy < Fixed.Zero ? 1 : 0); } } if (line.Dy == Fixed.Zero) { if (y <= line.Y) { return(line.Dx < Fixed.Zero ? 1 : 0); } else { return(line.Dx > Fixed.Zero ? 1 : 0); } } var dx = (x - line.X); var dy = (y - line.Y); // Try to quickly decide by looking at sign bits. if (((line.Dy.Data ^ line.Dx.Data ^ dx.Data ^ dy.Data) & 0x80000000) != 0) { if (((line.Dy.Data ^ dx.Data) & 0x80000000) != 0) { // Left is negative. return(1); } else { return(0); } } var left = new Fixed(line.Dy.Data >> 8) * new Fixed(dx.Data >> 8); var right = new Fixed(dy.Data >> 8) * new Fixed(line.Dx.Data >> 8); if (right < left) { // Front side. return(0); } else { // Back side. return(1); } }
/// <summary> /// Calculate on which side of the line the point is. /// </summary> /// <returns> /// 0 (front) or 1 (back), or 2 if the box crosses the line. /// </returns> public static int DivLineSide(Fixed x, Fixed y, DivLine line) { if (line.Dx == Fixed.Zero) { if (x == line.X) { return(2); } if (x <= line.X) { return(line.Dy > Fixed.Zero ? 1 : 0); } return(line.Dy < Fixed.Zero ? 1 : 0); } if (line.Dy == Fixed.Zero) { if (x == line.Y) { return(2); } if (y <= line.Y) { return(line.Dx < Fixed.Zero ? 1 : 0); } return(line.Dx > Fixed.Zero ? 1 : 0); } var dx = (x - line.X); var dy = (y - line.Y); var left = new Fixed((line.Dy.Data >> Fixed.FracBits) * (dx.Data >> Fixed.FracBits)); var right = new Fixed((dy.Data >> Fixed.FracBits) * (line.Dx.Data >> Fixed.FracBits)); if (right < left) { // Front side. return(0); } if (left == right) { return(2); } else { // Back side. return(1); } }
public void ChangeDivLine(int moveVal) { if (moveVal.Equals(0) && DivArrayIndex > 0) { DivArrayIndex--; } else if (moveVal.Equals(1) && DivArrayIndex < 10) { DivArrayIndex++; } DivLine = DivLineArray[DivArrayIndex]; DivLineText.text = DivLine.ToString(); UpdateBlockDivLine(); }
public void DivLineSide1() { var random = new Random(666); for (var i = 0; i < 1000; i++) { var startX = -1 - 666 * random.NextDouble(); var endX = +1 + 666 * random.NextDouble(); var pointX = 666 * random.NextDouble() - 333; var frontSideY = -1 - 666 * random.NextDouble(); var backSideY = -frontSideY; var vertex1 = new Vertex(Fixed.FromDouble(startX), Fixed.Zero); var vertex2 = new Vertex(Fixed.FromDouble(endX - startX), Fixed.Zero); var line = new LineDef( vertex1, vertex2, 0, 0, 0, null, null); var divLine = new DivLine(); divLine.MakeFrom(line); var node = new Node( Fixed.FromDouble(startX), Fixed.Zero, Fixed.FromDouble(endX - startX), Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero, 0, 0); var x = Fixed.FromDouble(pointX); { var y = Fixed.FromDouble(frontSideY); Assert.AreEqual(0, Geometry.DivLineSide(x, y, divLine)); Assert.AreEqual(0, Geometry.DivLineSide(x, y, node)); } { var y = Fixed.FromDouble(backSideY); Assert.AreEqual(1, Geometry.DivLineSide(x, y, divLine)); Assert.AreEqual(1, Geometry.DivLineSide(x, y, node)); } } }