public int Handle(RationalInfo info) { Rational r = info.rational; float cents = (float)r.ToCents(); float distance = (float)info.distance; float harm = 1f / distance; //float harm = Utils.GetHarmonicity(distance); // harmonicity: 0..1 float x = cents; // 0..1200 // use id as a tip string id = String.Format("{0} {1} {2} {3:F2} {4}", r.ToString(), r.FormatMonzo(), distance, r.ToCents(), _temperament.FormatRational(r) ); _image.Line(Point.Points(x, 0, x, harm * 3)) .Add(id: id) .FillStroke(Color.Empty, Color.LightGray, harm * 2); string fraction = r.FormatFraction("\n"); _image.Text(new Point(x, 0), fraction, harm * 2f, lineLeading: 0.8f, align: Image.Align.Center) .Add() .FillStroke(Color.Black, Color.Empty); return(1); }
void Test5_ParseRationals() { Rational r0 = Rational.Parse(" 81 / 80 \n"); Assert.Equal("|-4 4 -1>", r0.FormatMonzo()); Rational r1 = Rational.Parse(" | 7 \t 0 -3> "); Assert.Equal("|7 0 -3>", r1.FormatMonzo()); }
void Test1_Rationals() { Assert.Equals(new Rational(1), Rational.One); Assert.Equals(new Rational(2), Rational.Two); var r0 = new Rational(4, 5); var r1 = new Rational(6, 4); Assert.Equals(new Rational(4, 5), r0); Assert.Equals("4/5", r0.FormatFraction()); Assert.Equals("4/5", r0.ToString()); Assert.Equals("3/2", r1.ToString()); Assert.Equals("6/5", (r0 * r1).FormatFraction()); Assert.Equals("8/15", (r0 / r1).FormatFraction()); var r3 = new Rational(81, 80); Assert.Equal("|-4 4 -1>", r3.FormatMonzo()); Assert.Equal("|-2 4 -1}", r3.FormatNarrowPowers()); }