Koordinatları verilen Çokgenin Merkez Noktasını Bulmak Hk.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Koordinatları verilen Çokgenin Merkez Noktasını Bulmak Hk.

Mesaj gönderen barutali »

Merhabalar;

Uzun zamandır üzerinde çalıştığım bir projenin son modülünde takıldım..
Soruya geçecek olursak,

Koordinatları verilen bir çokgenimiz var. Aynı zamanda ayrı bir nokta olan koordinatımız var.

Verilen nokta koordinat çokgenin içinde mi yoksa dışında mı kaldığını bulan bir fonksiyona ihtiyaç duymaktayım..

Ek'te bulunan resimde ki harflerin koordinatları aşağıda ki gibidir.

A ) X : -531601.7377 Y : -4485890.4722
B ) X : -530325.0695 Y : -4485890.4722
C ) X : -530325.0695 Y : -4487140.4174
D ) X : -531601.7377 Y : -4487140.4174

X ) X : -531132.7575 Y : -4486391.7523


Koordinatlar Negatif yada Pozitif olabiliyor.. Örnekteki bir dörtgen olsa da daha fazla noktalar halinde olabiliyor..

Şimdi en can alıcı noktaya geliyorum..

X Noktası bu koordinatlar içinde mi yoksa dışında mı ?

Teşekkürler..
Dosya ekleri
MAP.png
MAP.png (2.52 KiB) 2271 kere görüntülendi
amatör küme programcı :D
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Koordinatları verilen Çokgenin Merkez Noktasını Bulmak H

Mesaj gönderen sadettinpolat »

http://www.efg2.com/Lab/Graphics/Basketball.htm burada ise yarar birseyler bulabilirsin gibi.
atilan basketin 2 sayilik mi 3 sayilik mi oldugu hesaplanmis.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Re: Koordinatları verilen Çokgenin Merkez Noktasını Bulmak H

Mesaj gönderen barutali »

Merhaba hocam,

Cevap için teşekkür ederim..

Şaban (Şaban Şahin AKMAN) hocam da Skype üzerinde bir link paylaştı.. Şuan için doğru cevap alıyorum fakat test esnasında eğer bir yanlış sonuç döndürürse sizin verdiğiniz link üzerinden testlere devam edicem..


Fonksiyon Aşağıda ki gibidir..

Kod: Tümünü seç

type
  TPointReal = record
    X, Y: Real;
  end;

function PtInPoly(const Points: Array of TPointReal; X,Y: Real):Boolean;
var Count, K, J : Integer;
begin
  Result := False;
  Count := Length(Points) ;
  J := Count-1;
  for K := 0 to Count-1 do begin
   if ((Points[K].Y <=Y) and (Y < Points[J].Y)) or
      ((Points[J].Y <=Y) and (Y < Points[K].Y)) then
   begin
    if (x < (Points[j].X - Points[K].X) * (y - Points[K].Y) /
            (Points[j].Y - Points[K].Y) + Points[K].X) then
        Result := not Result;
   end;
    J := K;
  end;

end;
amatör küme programcı :D
cecihan
Üye
Mesajlar: 94
Kayıt: 30 Ara 2006 11:40
İletişim:

Re: Koordinatları verilen Çokgenin Merkez Noktasını Bulmak H

Mesaj gönderen cecihan »

Zamanında çok düşünmüştük böyle şeyler üzerine. kusura bakmayın kod yazamam. (bu tür grafik kodlamayı bırakalı 10 yıldan fazla oldu) ama kesin kontrol eden mantığı anlatabilirim. x noktanızdan geçen x ve y ekseninde sonsuza giden yatay ve düşey birbirine dik ( + şeklinde ) 2 çizgi olduğunu düşünün. eğer bu 2 doğruyu solda, sağda, yukarıda ve aşağıda sizin kontrol edeceğiniz diğer doğrular kesiyor ise nokta o çokgenin içinde demektir. ama bir veya daha çok tarafta kesmiyorsa o çokgenin dışındasınızdır.
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Koordinatları verilen Çokgenin Merkez Noktasını Bulmak H

Mesaj gönderen warder »

cecihan yazdı:Zamanında çok düşünmüştük böyle şeyler üzerine. kusura bakmayın kod yazamam. (bu tür grafik kodlamayı bırakalı 10 yıldan fazla oldu) ama kesin kontrol eden mantığı anlatabilirim. x noktanızdan geçen x ve y ekseninde sonsuza giden yatay ve düşey birbirine dik ( + şeklinde ) 2 çizgi olduğunu düşünün. eğer bu 2 doğruyu solda, sağda, yukarıda ve aşağıda sizin kontrol edeceğiniz diğer doğrular kesiyor ise nokta o çokgenin içinde demektir. ama bir veya daha çok tarafta kesmiyorsa o çokgenin dışındasınızdır.
Güzel mantık. Her iki doğrunun kesiyor olması gerekiyor ancak birisi de her iki uçta verilen çokgen koordinatlarıyla kesişiyorsa nokta içerdedir denmez mi?
Yani nokta içerdeyse zaten kontrol edilen her açıdaki her doğrunun iki ucu da kesişecektir. O halde bir tek doğru kontrol edilse yetmez mi?
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Cevapla