コード例 #1
0
 public Triangle(double side1, double side2, double side3, double angle3, TriangleDescriptors descriptors = TriangleDescriptors.None) : this()
 {
     Descriptors          = descriptors;
     (AngleA, AngleB)     = LawOfSines(SideC, AngleC, SideA, SideB, out double d);
     CircumcircleDiameter = d;
     Initialize();
 }
コード例 #2
0
        /*[Flags]
         * private enum Sides
         * {
         *  None,
         *  SideA = 1,
         *  SideB = 2,
         *  SideC = 4
         * };
         *
         * [Flags]
         * private enum Angles
         * {
         *  None,
         *  AngleA = 1,
         *  AngleB = 2,
         *  AngleC = 4
         * };
         *
         * public Triangle(
         *  Tuple<double, double, double> sides,
         *  Tuple<Angle, Angle, Angle> angles,
         *  TriangleDescriptors descriptors
         * ) {
         *  Sides sidesUnavailable = Sides.None;
         *  Angles anglesUnavailable = Angles.None;
         *  int numSidesUnavailable = 0;
         *  int numAnglesUnavailable = 0;
         *  if (sides.Item1 <= 0)
         *  {
         *      sidesUnavailable |= Sides.SideA;
         ++numSidesUnavailable;
         *  }
         *  if (sides.Item2 <= 0)
         *  {
         *      sidesUnavailable |= Sides.SideB;
         ++numSidesUnavailable;
         *  }
         *  if (sides.Item3 <= 0)
         *  {
         *      sidesUnavailable |= Sides.SideC;
         ++numSidesUnavailable;
         *  }
         *
         *  if (angles.Item1.IsNull)
         *  {
         *      anglesUnavailable |= Angles.AngleA;
         ++numAnglesUnavailable;
         *  }
         *  if (angles.Item2.IsNull)
         *  {
         *      anglesUnavailable |= Angles.AngleB;
         ++numAnglesUnavailable;
         *  }
         *  if (angles.Item3.IsNull)
         *  {
         *      anglesUnavailable |= Angles.AngleC;
         ++numAnglesUnavailable;
         *  }
         *
         *  if (numSidesUnavailable == 0)
         *  {
         *      if (numAnglesUnavailable == )
         *  }
         * }*/

        public Triangle(double side1, double side2, double angle3, TriangleDescriptors descriptors) :
            this(
                side1, side2,
                descriptors == TriangleDescriptors.Right ?
                Math.Sqrt((side1 * side1) + (side2 * side2)) :
                LawOfCosines(side1, side2, angle3),
                angle3,
                descriptors
                )
        {
        }
コード例 #3
0
        private void Initialize()
        {
            if (Descriptors == TriangleDescriptors.None)
            {
                bool acute = true;
                foreach (var angle in new Angle[] { AngleA, AngleB, AngleC })
                {
                    if (angle.Degrees > 90)
                    {
                        acute        = false;
                        Descriptors |= TriangleDescriptors.Obtuse;
                    }
                    else if (angle.Degrees == 90)
                    {
                        acute        = false;
                        Descriptors |= TriangleDescriptors.Right;
                    }
                }
                if (acute)
                {
                    Descriptors |= TriangleDescriptors.Acute;
                }

                if (AngleA.Degrees == AngleB.Degrees || AngleB.Degrees == AngleC.Degrees || AngleC.Degrees == AngleA.Degrees)
                {
                    if (AngleA.Degrees == AngleB.Degrees && AngleB.Degrees == AngleC.Degrees)
                    {
                        Descriptors |= TriangleDescriptors.Equilateral;
                    }
                    else
                    {
                        Descriptors |= TriangleDescriptors.Isoscoles;
                    }
                }
            }

            Area = GetArea(SideA, SideB, SideC);
            CircumcircleDiameter = SideA / Math.Sin(AngleA.Radians);
        }