2013-09-04 18 views
14

Bir dairenin sayıya göre N eşit parçaya bölünmesi gerekliliğine ihtiyacım var (2,3 ... n. Fakat bölme koordinatlarını istiyorum noktaları I centre(x,y) ve radius(150) bilinmektedir bir çevre sahipandroid Daireyi N eşit parçaya bölme ve her bölme noktasının koordinatlarını bilir

Soru.:.

bana noktaları bir bölme koordinatlarını veren herhangi bir formül var mı s şekilde gösterilmiştir. Herkes bana formülü söyleyebilir mi? Java'da uygulamak istiyorum. refrence

Çember resim:

image

+1

x = x 0 + sin (açı) r, y = y0 + cos (açı) * r – pskink

+0

Bu formül nasıl doğru değildir ve kabul edilen dahil olmak üzere burada her bir cevapta kullanılır. – mykolaj

cevap

17

Sen polar ve Cartesian koordinatlar arasındaki convert gerekir. İhtiyacınız olan açı, daireyi yarıya bölen (sanal) dikey çizgi ile merkezin dairenin sınırını birbirine bağlayan çizgi arasındaki açıdır. Bu formülle X ve Y ofsetlerini merkezden hesaplayabilirsiniz.

Örnek resminizde ilk açı 0, diğeri 360/n'dir. Her bir sonraki i*(360/n) olup, burada çizmeniz gereken geçerli satırın indisi. Bunu uygulamak, X ve Y ofsetlerini saat yönünde düzenler (ve her noktanın koordinatlarını bulmak için bunları merkezin X ve Y koordinatlarına ekleyebilirsiniz)

DÜZENLEME: bir çeşit sahte kod :

//x0, y0 - center's coordinates 
for(i = 1 to n) 
{ 
    angle = i * (360/n); 
    point.x = x0 + r * cos(angle); 
    point.y = y0 + r * sin(angle); 
} 
+0

için bir cevap verin ur cevap için teşekkürler .. + 1 formu bana ...Eğer koordinatlarla diziyi döndüren formülü verirseniz ... takdir edilecektir ... ur cevabını kabul ediyorum. Eşit parçaların hiçbirini tanımlayan numarayı geçmek ve koordinatlarla diziyi döndürmek istiyorum ..! – TheFlash

+1

@Indiandroid Bunu sizin için adapte etmeden ihtiyaçlarınızı karşılamak için uygulamanız gerekir. Bunu kendi başınıza yapamazsanız, programlama yapmamalısınız. – Neil

+0

@Neil Tavsiye ettiğin için teşekkürler. – TheFlash

18

Zaten yanıtı kabul ettim ... formül mükemmel çalışıyor. İşte Java'da kodlanmış çözüm. Diğer geliştiricilere yardımcı olacaktır. x0 ve y0 çemberin centre.and r eş koordine olan

private int x[]; // Class variable 
    private int y[]; // Class variable 

    private void getPoints(int x0,int y0,int r,int noOfDividingPoints) 
    { 

     double angle = 0; 

     x = new int[noOfDividingPoints]; 
     y = new int[noOfDividingPoints]; 

     for(int i = 0 ; i < noOfDividingPoints ;i++) 
     { 
      angle = i * (360/noOfDividingPoints); 

      x[i] = (int) (x0 + r * Math.cos(Math.toRadians(angle))); 
      y[i] = (int) (y0 + r * Math.sin(Math.toRadians(angle))); 

     } 

     for(int i = 0 ; i < noOfDividingPoints ;i++) 
     { 
      Log.v("x",""+i+": "+x[i]); 
      Log.v("y",""+i+": "+y[i]); 

     } 
    } 

yarıçapıdır. Benim durumda

:

giriş x 0 = 0, y0 = 0 ve r = 150, noOfDividingPoints = 5

çıkış

point1: (150,0)

point2: (46,142)

Point3: (-121,88)

point4: (-121, -88)

point5: (46, -142)

+0

İyi iş! Buddy! +1 – TheLittleNaruto

+1

@Kumar Gaurav teşekkürler ... umarım başkalarına yardımcı olur. – TheFlash

+0

fonksiyon her zaman, ben her zaman, 5 NoOfDividingPoints ile yarıçapı 100 bir daire istiyorum gibi, – Androider