예제 #1
0
파일: Krug.cs 프로젝트: withoutJ/GeoGebra
        public void Presek(Krug k1, Tacka[] Tacke, ObjekatInfo[] Objekti)
        {
            if (Math.Abs(this.Centar.Y - k1.C.Y) < GeoGebra.eps)
            {
                if (Math.Abs(this.Centar.X - k1.C.X) < GeoGebra.eps)
                {
                    return;
                }
                double x = (this.R * this.R - k1.R * k1.R + k1.Centar.X * k1.Centar.X - this.Centar.X * this.Centar.X) / (2 * (k1.Centar.X - this.Centar.X));
                double b = (-2) * this.Centar.Y;
                double c = (x - this.Centar.X) * (x - this.Centar.X) - this.R * this.R;
                if (b * b - 4 * c < 0)
                {
                    return;
                }
                if (b * b - 4 * c < GeoGebra.eps)
                {
                    GeoGebra.DodajTacku(new Tacka(x, (-b) / 2, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti);
                }
                else
                {
                    double y = (-b + Math.Sqrt(b * b - 4 * c)) / 2;
                    GeoGebra.DodajTacku(new Tacka(x, y, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti);
                    y = (-b - Math.Sqrt(b * b - 4 * c)) / 2;
                    GeoGebra.DodajTacku(new Tacka(x, y, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti);
                    return;
                }
            }
            double k = (this.Centar.X - k1.Centar.X) / (k1.Centar.Y - this.Centar.Y);
            double n = (this.R * this.R - k1.R * k1.R + k1.Centar.X * k1.Centar.X - this.Centar.X * this.Centar.X + k1.Centar.Y * k1.Centar.Y - this.Centar.Y * this.Centar.Y) / (2 * (k1.Centar.Y - this.Centar.Y));
            Prava  p = new Prava(k, n, "");

            this.Presek(p, Tacke, Objekti);
        }
예제 #2
0
파일: Krug.cs 프로젝트: withoutJ/GeoGebra
        public void Presek(Prava p, Tacka[] Tacke, ObjekatInfo[] Objekti)
        {
            if (this.Centar.Rastojanje(p) - this.R > GeoGebra.eps)
            {
                return;
            }
            double a = 1 + p.K * p.K;
            double b = -2 * this.Centar.X + 2 * p.K * p.N - 2 * p.K * this.Centar.Y;
            double c = this.Centar.X * this.Centar.X + p.N * p.N + this.Centar.Y * this.Centar.Y - 2 * p.N * this.Centar.Y - this.R * this.R;

            if (Math.Abs(this.Centar.Rastojanje(p) - this.R) < GeoGebra.eps)
            {
                double x = (-b) / (2 * a);
                double y = p.K * x + p.N;
                GeoGebra.DodajTacku(new Tacka(x, y, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti);
                return;
            }
            if (this.R - this.Centar.Rastojanje(p) > GeoGebra.eps)
            {
                double x = ((-b) + Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
                double y = p.K * x + p.N;
                GeoGebra.DodajTacku(new Tacka(x, y, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti);
                x = ((-b) - Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
                y = p.K * x + p.N;
                GeoGebra.DodajTacku(new Tacka(x, y, "A" + (Tacka.NT + 1).ToString(), Color.DarkGray), Tacke, Objekti);
                return;
            }
        }
예제 #3
0
파일: Prava.cs 프로젝트: withoutJ/GeoGebra
 public virtual Tacka Presek(Prava p)
 {
     if (Math.Abs(this.K - p.K) < GeoGebra.eps)
     {
         return(null);
     }
     return(new Tacka((p.N - this.N) / (this.K - p.K), (this.K * p.N - p.K * this.N) / (this.K - p.K), "A" + (Tacka.NT + 1).ToString(), Color.DarkGray));
 }
예제 #4
0
파일: Prava.cs 프로젝트: withoutJ/GeoGebra
 public double Ugao(Prava p)
 {
     if ((Math.Abs(this.K - p.K) < GeoGebra.eps) && (Math.Abs(this.N - p.N) < GeoGebra.eps))
     {
         return(0);
     }
     if (Math.Abs(this.K - p.K) < GeoGebra.eps)
     {
         return(-1);
     }
     return(Math.Round(Math.Min(Math.Abs(Math.Atan(this.K) - Math.Atan(p.K)), Math.PI - Math.Abs(Math.Atan(this.K) - Math.Atan(p.K))) * 360 / (2 * Math.PI), 2));
 }
예제 #5
0
파일: Prava.cs 프로젝트: withoutJ/GeoGebra
 public Prava SimetralaUgla(Prava p)
 {
     if (this.Presek(p) == null)
     {
         return(null);
     }
     if (this.K < p.K)
     {
         double k1 = Math.Tan((Math.Atan(this.K) + Math.Atan(p.K)) / 2);
         double n1 = this.Presek(p).Y - k1 * this.Presek(p).X;
         return(new Prava(k1, n1, "p" + (Prava.NP + 1).ToString()));
     }
     else
     {
         double k2 = Math.Tan(Math.PI / 2 + (Math.Atan(this.K) + Math.Atan(p.K)) / 2);
         double n2 = this.Presek(p).Y - k2 * this.Presek(p).X;
         return(new Prava(k2, n2, "p" + (Prava.NP + 1).ToString()));
     }
 }
예제 #6
0
파일: Krug.cs 프로젝트: withoutJ/GeoGebra
 public Krug Refleksija(Prava p)
 {
     return(new Krug(this.Centar.Refleksija(p), this.R, "k" + (NK + 1).ToString()));
 }
예제 #7
0
파일: Krug.cs 프로젝트: withoutJ/GeoGebra
 public Krug InverzijaNeProlazi(Prava p)
 {
     return(new Krug(this.Centar, this.Inverzija(new Tacka(0, p.N, "", Color.Black)), this.Inverzija(new Tacka(1, p.K + p.N, "", Color.Black)), "k" + (Krug.NK + 1).ToString()));
 }
예제 #8
0
파일: Krug.cs 프로젝트: withoutJ/GeoGebra
 public Prava InverzijaProlazi(Prava p)
 {
     return(new Prava(p.K, p.N, (Prava.NP + 1).ToString()));
 }
예제 #9
0
파일: Prava.cs 프로젝트: withoutJ/GeoGebra
 public Duz Refleksija(Prava p, Tacka[] Tacke, ObjekatInfo[] Objekti)
 {
     GeoGebra.DodajTacku(this.Tacka1.Refleksija(p), Tacke, Objekti);
     GeoGebra.DodajTacku(this.Tacka2.Refleksija(p), Tacke, Objekti);
     return(new Duz(Tacke[Tacka.NT - 2], Tacke[Tacka.NT - 1]));
 }
예제 #10
0
파일: Prava.cs 프로젝트: withoutJ/GeoGebra
 public override Tacka Presek(Prava p)
 {
     return(p.Presek(this));
 }
예제 #11
0
파일: Prava.cs 프로젝트: withoutJ/GeoGebra
 public Prava Refleksija(Prava p)
 {
     return(new Prava((new Tacka(0, this.N, "", Color.Black)).Refleksija(p), (new Tacka(1, this.N + this.K, "", Color.Black)).Refleksija(p), "p" + (Prava.NP + 1).ToString()));
 }