Beispiel #1
0
        //verilen noktanýn þeklin çizgilerine olan uzaklýðýný verir
        public override float Uzaklik(Nokta nokta)
        {
            //mantýk: elipsin merkezlerinden birisinin kendisine yakýn olan kýsa kenara
            //olan uzaklýðýna m diyorum. m'in formülü þöyle buldum:
            //m*m - b*m + a*a/4 = 0 (b: dikdörtgenin uzun kenarý, a: kýsa kenarý)
            //daha sonra m yardýmýyla elipsin iki merkezini hesaplýyorum. Sonra bu merkezler
            //yardýmýyla verilen noktanýn elipse olan uzaklýðýný bulacaðým. Þimdi m hesaplanýyor...
            float a, b;

            if (boyut.genislik > boyut.yukseklik)
            {
                a = boyut.yukseklik;
                b = boyut.genislik;
            }
            else
            {
                a = boyut.genislik;
                b = boyut.yukseklik;
            }
            float delta = (float)(Math.Pow(b, 2.0) - Math.Pow(a, 2.0));

            if (delta < 0)
            {
                return(1000.0f);                    //delta<0 ise kökler sanal, devam etme.
            }
            float kok1 = (float)(b + Math.Sqrt(delta)) / 2.0f;
            float kok2 = (float)(b - Math.Sqrt(delta)) / 2.0f;
            float m    = (kok1 > 0.0f && kok1 < (b / 2.0f)) ? (kok1):(kok2);
            //m hesaplandý. þimdi Merkezler bulunuyor
            Nokta merkez1, merkez2;

            if (boyut.genislik > boyut.yukseklik)
            {
                merkez1 = new Nokta(solUstKose.x + m, solUstKose.y - boyut.yukseklik / 2.0f);
                merkez2 = new Nokta(solUstKose.x + boyut.genislik - m, solUstKose.y - boyut.yukseklik / 2.0f);
            }
            else
            {
                merkez1 = new Nokta(solUstKose.x + boyut.genislik / 2.0f, solUstKose.y - m);
                merkez2 = new Nokta(solUstKose.x + boyut.genislik / 2.0f, solUstKose.y - boyut.yukseklik + m);
            }
            //verilen noktanýn merkezlere olan toplam uzaklýðý hesaplanýyor
            float muzaklik = nokta.Uzaklik(merkez1) + nokta.Uzaklik(merkez2);

            //elipsin üstündeki bir noktanýn merkezlere olan toplam uzaklýðý
            //ile verilen noktanýnki arasýndaki mutlak deðer dönderiliyor
            //b = elipsin üstündeki bir noktanýn merkezlere olan toplam uzaklýðý
            return((float)(Math.Abs(muzaklik - b)));
        }
        //aktif olarak çizilen þeklin önizlemesini görmek için
        public void NoktaEkleOnizleme(Nokta yeniNokta)   //yeniNokta: santim tipinde
        {
            if (noktalar.Count > 0)                      //en az bir nokta varsa devam et
            {
                Nokta ilkNokta = (Nokta)noktalar.Peek(); //birinci noktayý kuyruktan bul
                Sekil sekil    = null;
                switch (tip)
                {
                case CizimTipi.Dikdortgen:                         //dikdörtgen önizlemesi
                    sekil = Dikdortgen.KuralliDikdortgen(ilkNokta, yeniNokta);
                    break;

                case CizimTipi.Cember:                         //çember önizlemesi
                    sekil = new Cember(ilkNokta.Kopyasi(), ilkNokta.Uzaklik(yeniNokta));
                    break;

                case CizimTipi.Elips:                         //elips önizlemesi
                    sekil = Elips.KuralliElips(ilkNokta, yeniNokta);
                    break;

                case CizimTipi.Dogru:                         //doðru serisi ya da doðru önizlemesi
                case CizimTipi.DogruSerisi:
                    sekil = new Dogru(ilkNokta, yeniNokta);
                    break;
                }
                if (sekil != null)
                {
                    sekil.cizgiRengi = cizimFormu.AnaForm.CizimRengiSecimi.Color;
                    goruntuGuncelle(sekil);
                }
            }
        }
Beispiel #3
0
        //verilen noktanýn þeklin çizgilerine olan uzaklýðýný verir
        public override float Uzaklik(Nokta nokta)
        {
            //mantýk: Verilen noktadan geçen ve bu doðruya dik olan doðru ile bu doðrunun
            //kesiþim noktasýný bul ve bu noktayla verilen nokta arasýndaki uzaklýðý dönder
            float m       = Egimi();                                                               //bu doðrunun eðimi
            Nokta kesisim = new Nokta();                                                           //yukarýda anlatýlan kesiþim noktasý

            kesisim.x = (float)(nokta.x + m * m * bas.x - m * (bas.y - nokta.y)) / (m * m + 1.0f); //kesiþimin x noktasý
            kesisim.y = (float)(m * (kesisim.x - bas.x) + bas.y);                                  //kesiþimin y noktasý
            return(nokta.Uzaklik(kesisim));
        }
        //Noktalar kuyruðuna bir nokta ekle
        public void NoktaEkle(Nokta yeniNokta) //yeniNokta: santim tipinde
        {
            if (noktalar.Count == 0)           //eðer hiç nokta yoksa ilk noktayý sakla
            {
                noktalar.Enqueue(yeniNokta);
                //çizim formunun ilk andaki görüntüsünü sakla
                ilkGoruntu = cizimFormu.CizimAlaniGoruntusuVer(null, true);
            }
            else                                             //en az bir nokta varsa þeklin tipine göre karar ver
            {
                Nokta ilkNokta  = (Nokta)noktalar.Dequeue(); //birinci noktayý kuyruktan al
                Sekil yeniSekil = null;
                switch (tip)
                {
                case CizimTipi.Dogru:                                                    //seçili katmana bir doðru ekle
                    yeniSekil      = new Dogru(ilkNokta.Kopyasi(), yeniNokta.Kopyasi()); //yeni bir doðru oluþtur
                    yeniSekil.isim = "yeni doðru";
                    break;

                case CizimTipi.Dikdortgen:                         //seçili katmana bir dikdörtgen ekle
                    yeniSekil      = Dikdortgen.KuralliDikdortgen(ilkNokta, yeniNokta);
                    yeniSekil.isim = "yeni dikdörtgen";
                    break;

                case CizimTipi.Cember:                         //seçili katmana bir çember ekle
                    yeniSekil      = new Cember(ilkNokta.Kopyasi(), ilkNokta.Uzaklik(yeniNokta));
                    yeniSekil.isim = "yeni çember";
                    break;

                case CizimTipi.Elips:                         //seçili katmana bir Elips ekle
                    yeniSekil      = Elips.KuralliElips(ilkNokta, yeniNokta);
                    yeniSekil.isim = "yeni elips";
                    break;

                case CizimTipi.DogruSerisi:
                    //seçili katmana bir doðru ekle ve diðer doðrunun
                    //baþlangýç noktasýný bunun bitiþ noktasý yap
                    yeniSekil      = new Dogru(ilkNokta.Kopyasi(), yeniNokta.Kopyasi());                        //yeni bir doðru oluþtur
                    yeniSekil.isim = "yeni doðru";
                    SekilCizimiTamamlandi(yeniSekil);
                    yeniSekil = null;
                    NoktaEkle(yeniNokta);                             // yeni nokta sonraki doðrunun ilk noktasý
                    break;

                default:
                    break;
                }
                //çizimin tamamlandýðýný belirten olay tetikleniyor
                if (yeniSekil != null)
                {
                    SekilCizimiTamamlandi(yeniSekil);
                }
            }
        }
Beispiel #5
0
 //verilen noktanýn þeklin çizgilerine olan uzaklýðýný verir
 public override float Uzaklik(Nokta nokta)
 {
     return(Math.Abs(merkez.Uzaklik(nokta) - yariCap));
 }