Bir nirengi izometrik ızgarasında, neyi üçgen verilen bir nokta var?

oy
5

Böyle bir üçgen izometrik ızgara vardır: alt

Benim kodunda, üçgenler sütunlara göre gruplandırılmıştır.

Ben fareyi olarak, fare koordinatları içinde ne üçgeni. Bunu yapmak için basit bir algoritma var mı hesaplamak istiyor?

Oluştur 15/02/2010 saat 05:20
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
4

Ne yapmak istediğiniz ızgaraları ile çalışmak çok daha kolay olduğu için mümkün olduğunca bir ızgara dönüştürelim olduğunu.

Yapacağın ilk şey içinde ne sütunu. Sen bu yüzden basit bir tamsayı bölme yaparak daha kolay olması gerektiğini saklamak demek çalışmak olduğunu x kutu başından tarafından ofset sütun genişliği tarafından koordine. Kolay.

Bundan sonra o (besbelli) içinde ne üçgen çözmek istiyorum. Eğer kısmen ızgara dönüştürelim nasıl doğru açılı üçgenler yığını yerine izometrik üçgenler yığını olduğunu iddia olduğunu.

üçgenler y ekseni (kolonun taraf) bir uzunluğa sahiptir. ikisinde bu numarayı bölün ve kaç adım aşağı egzersiz yapın. aşağı adım sayısına dayanarak ve sütun olup olmadığını bakıyorsanız çift veya tek söyleyecektir:

+--------+
|-_      |
|  -_    |
|    -_  |
|      -_|
+--------+

ya da ters. Bu noktada sadece o da İçinde izometrik hangi üçgen anlatır ki, öyle sağ hangi üçgen o belirlemek için üzerinde bulunuyor çizginin hangi tarafında belirlemek gerekir.

Bunun için birkaç seçenek var.

  1. Sen hipotenüs rasterleştirmek bresenham'ın çizgi algoritması gibi bir şey kullanabilirsiniz ve sütun vurduğunda yukarıda veya bu çizginin altında iseniz iş çıkışı konum;
  2. Eğer sadece burada iki olası ızgaralar Çünkü (bir diğerinin ters olmakla o kadar gerçekten tek kişi o). Eğer 6 için 4 ° C sıcaklıkta ve böylece var ise, ofset 2'de sütun 3, hipotenüs olduğunu söyleyen, sıra değerlerinin bir dizisini depolamak.

Hatta (1) hızlı arama olarak (2) oluşturmak için kullanabilirsiniz.

dikkate tek şey fare imleci bir kenarında ise böyle olur?

Cevap 15/02/2010 saat 05:32
kaynak kullanıcı

oy
3

Bu cletus söylediklerini benzer, ama farklı bir yolu herhalde bakmak.

Ben üçgen tarafı 1'dir varsayıyorum.

Eğer aşağıdaki gibi ızgara olduğunu varsayalım:

       y'
      /
     /__/__/__/__/__/__/
    /__/__/__/__/__/__/
   /__/__/__/__/__/__/____ x'
(0,0)

x ve y eksenleri, 60 derecede, olan açılı sistemde koordinat (x 'y') noktasına 'lik bir açıda olan bir koordinat sisteminde ızgara düşünürsek koordinat karşılık gelecek (x, y) (aynı kökenli eksenlerin bir genel yönü) ile ortogonal sistemi.

Sorunun, sen (x, y) verilir, biz ( 'y' x) bulmak ve sonra üçgen anlamaya ihtiyacımız var.

i, x ve y boyunca dikey j birlikte birim vektör ise, o zaman bu var

x'* i + y'( i/2 + sqrt(3) * j /2) = xi + yj.

(Temel 'açılı' y ekseni boyunca birim vektör (3) / 2 * j i / 2 + sqrt olup. X ekseni boyunca birim vektör, yani I, x-ekseni, normal olarak aynıdır).

Böylece

x' + y'/2 = x
y' * sqrt(3)/2 = y

Çözme verir:

y' = 2*y/sqrt(3)
x' = x - y/sqrt(3)

Şimdi bu x için varsayalım 've y' olumludur.

Şimdi ise C = [x '] x tamsayı kısmı'

ve r = [y '], y tam sayı kısmı'

Daha sonra (açısal) ızgara, nokta CTH sütun ve r'inci üst üste yer alır. (Hakkı Sayma ve yukarı ve 0'dan saymaya başlar).

Böylece bir paralelkenar açınızı indirgediğimizi

       ____
      /\ * /   
     /___\/
   (c,r)

Şimdi sırayla size x 've y' kesirli kısımlarını düşünebilirsiniz halinde olduğu üçgen öğrenmek için.

{x} = x' - [x'] = x' - c.
{y} = y' - [y'] = y' - r.

Şimdi,

eğer {x} + {y} > 1, o zaman nokta * ile işaretlenmiş üçgeninde yatıyor. eğer {x} + {y} < 1, o zaman nokta diğer üçgen yatıyor. eğer {x} + {y} = 1, o zaman nokta iki üçgen ortak hattı üzerindedir.

bu da yardımcı olur.

Cevap 15/02/2010 saat 09:45
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more