using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
namespace triangle1
{
    public class triangle
    {
               
        public static void Main()
        {
            triangle tri = new triangle();
            ArrayList al = new ArrayList();
            Point p1= new Point();        
            Point p2 = new Point();
            Point p3 = new Point();
            Point p4 = new Point();
            Console.WriteLine("请输入第1个点的x坐标");     //为3角形的p1,p2,p3的坐标赋值
            p1.x = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("请输入第1个点的y坐标");
            p1.y=Convert.ToDouble(Console.ReadLine());
         
            Console.WriteLine("请输入第2个点的x坐标");
            p2.x = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("请输入第2个点的y坐标");
            p2.y = Convert.ToDouble(Console.ReadLine());            Console.WriteLine("请输入第3个点的x坐标");
            p3.x = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("请输入第3个点的y坐标");
            p3.y = Convert.ToDouble(Console.ReadLine());            al.Add(p1);
            al.Add(p2);
            al.Add(p3);            if (IsTriangle(al))
            {
                Console.WriteLine("能组成3角形");
                double b=triangleArea(p1, p2, p3);
                Console.WriteLine("area is"+b);
            }
            else
                Console.WriteLine("输入的3点不能组成3角形");            
              
                      
        }        public static bool IsTriangle(ArrayList ptList)       //此函数判断输入的3个点是否能够组成3角形,2边之个大于第3边
        {            Point pt0 = (Point)ptList[0];            Point pt1 = (Point)ptList[1];            Point pt2 = (Point)ptList[2];            //如果有两个点相同            if (pt0.Equals(pt1) || pt0.Equals(pt2) || pt1.Equals(pt2))
            {                return false;            }            float length_01 = (float)Math.Sqrt((pt0.x - pt1.x) * (pt0.x - pt1.x) + (pt0.y - pt1.y) * (pt0.y - pt1.y));            float length_02 = (float)Math.Sqrt((pt0.x - pt2.x) * (pt0.x - pt2.x) + (pt0.y - pt2.y) * (pt0.y - pt2.y));            float length_12 = (float)Math.Sqrt((pt2.x - pt1.x) * (pt2.x - pt1.x) + (pt2.y - pt1.y) * (pt2.y - pt1.y));            bool result0 = (length_01 + length_02 <= length_12);            bool result1 = (length_01 + length_12 <= length_02);            bool result2 = (length_02 + length_12 <= length_01);            if (result0 || result1 || result2)
            {                return false;            }            return true;        }
        
       
        public  double triangleArea(Point p1, Point p2, Point p3)     //求三角形的面积
        {
            double result = Math.Abs((p1.x * p2.y + p2.x * p3.y + p3.x * p1.y
                    - p2.x * p1.y - p3.x * p2.y - p1.x * p3.y) / 2.0D);
            return result;
        }        public Boolean inTriangle(Point p4, Point p1, Point p2,Point p3)    //判断点是否在三角形内
        {
            double triangleArea = triangleArea(p1, p2, p3);
            double area = triangleArea(p, p1, p2);
            area += triangleArea(p, p1, p3);
            area += triangleArea(p, p2, p3);
            double epsilon = 0.001;     // 由于浮点数的计算存在着误差,故指定一个足够小的数,用于判定两个面积是否(近似)相等。
            if (Math.Abs(triangleArea - area) < epsilon)
            {
                return true;
            }
            return false;
        }
         class Point
        {
            public double x;
            public double y;
            public Point()
            { }
           
        }
          }
    
   
}
编译老出错错误 可访问性不一致: 参数类型“triangle1.triangle.Point”比方法“triangle1.triangle.triangleArea(triangle1.triangle.Point, triangle1.triangle.Point, triangle1.triangle.Point)”的可访问性低 C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\triangle1\triangle1\Program.cs 111 24 triangle1

解决方案 »

  1.   

    修改triangle1.triangle.Point 类定义,为public
      

  2.   


    另外,Lz的inTriangle 方法里判断的参数不对啊。p0,p1,p2,p3.哪里有P啊?
      

  3.   

    修改triangle1.triangle.Point 类定义,为public
      

  4.   

    在Point类型定义前面加上public 关键字时,编译通过。
    分析原因:
    在C#中如果在同一个命名空间有一个类和一个方法,在这种情况下,如果在方法中使用该类时,方法没有访问权限,这当然是不允许的,因此,自然也就无法使用public方法了,所以,c#编译器规定public方法的参数类型必须也被声明成public。