Σε μια διασταυρώθηκε ισομετρική πλέγμα, τι τρίγωνο είναι δεδομένο σημείο;

ψήφοι
5

Έχω ένα τριγωνικό ισομετρική δίκτυο, όπως αυτό: alt

Κατά τον κωδικό μου, τα τρίγωνα ομαδοποιούνται από τις στήλες.

Όπως περάστε το ποντίκι, θέλω να υπολογίσει τι τρίγωνο οι συντεταγμένες του ποντικιού είναι. Είναι ένα απλό αλγόριθμο για να το κάνουμε αυτό;

Δημοσιεύθηκε 15/02/2010 στις 05:20
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
4

Τι θέλετε να κάνετε είναι να μετατρέψει αυτό σε ένα πλέγμα όσο το δυνατόν περισσότερο, διότι τα δίκτυα είναι πολύ πιο εύκολο να εργαστεί με.

Το πρώτο πράγμα που κάνουμε είναι να μάθουμε τι στήλης είναι σε. Λέτε να αποθηκεύσετε ότι γι 'αυτό θα πρέπει να είναι πιο εύκολη κάνοντας μια απλή ακέραιο τμήμα για το x συντονίζει το πλάτος της στήλης αντισταθμίζεται από την έναρξη κουτί. Εύκολος.

Μετά από αυτό που θέλετε να ασκηθείτε τι τρίγωνο είναι το (προφανώς). Πώς να ενεργοποιήσετε εν μέρει αυτό σε ένα πλέγμα είναι να προσποιούμαστε ότι έχετε μια στοίβα σωστά τρίγωνα γωνία αντί για μια στοίβα ισομετρική τρίγωνα.

Τα τρίγωνα έχουν ένα μήκος κατά μήκος του άξονα y (η πλευρά της στήλης). Διαιρέστε τον αριθμό αυτό σε δύο και ασκηθείτε πόσα βήματα κάτω από σας είναι. Με βάση τον αριθμό των βημάτων προς τα κάτω και, αν η στήλη είναι μονό ή ζυγό θα σας πω αν ψάχνετε σε:

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

ή το αντίστροφο. Σε αυτό το σημείο το μόνο που χρειάζεται για να καθορίσει ποια πλευρά της γραμμής είναι για να καθορίσει ποια σωστό τρίγωνο είναι το, το οποίο σας λέει επίσης ποια ισομετρική τρίγωνο είναι το.

Έχετε δύο επιλογές για αυτό.

  1. Θα μπορούσατε να χρησιμοποιήσετε κάτι σαν τον αλγόριθμο γραμμή Bresenham να ραστεροποιήσετε της υποτείνουσας και όταν χτύπησε τη στήλη είστε στην εργασία έξω, αν είστε πάνω ή κάτω από αυτή τη γραμμή?
  2. Επειδή έχετε μόνο δύο πιθανές πλέγματα εδώ (ο ένας να είναι το αντίθετο του άλλου έτσι είναι πραγματικά μόνο ένα). Θα μπορούσε να αποθηκεύσει μια σειρά από αξίες σειρά, λέγοντας ότι για τη στήλη 3, η υποτείνουσα είναι σε offset 2, ενώ για 6 είναι στο 4 και ούτω καθεξής.

Μπορείτε ακόμη να χρησιμοποιήσετε (1) για τη δημιουργία (2) σαν μια γρήγορη αναζήτηση.

Το μόνο άλλο πράγμα που εξετάζει είναι τι θα συμβεί αν ο κέρσορας του ποντικιού βρίσκεται σε μια άκρη;

Απαντήθηκε 15/02/2010 στις 05:32
πηγή χρήστη

ψήφοι
3

Αυτό είναι παρόμοιο με αυτό που είπε ο Cletus, αλλά ένας διαφορετικός τρόπος να το δει κανείς, υποθέτω.

Υποθέτω η πλευρά τριγώνου είναι 1.

Ας υποθέσουμε ότι έχετε το πλέγμα, όπως παρακάτω:

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

Αν θεωρείτε το πλέγμα σε ένα σύστημα συντεταγμένων στο οποίο το x και y άξονες είναι σε γωνία 60 μοιρών, ένα σημείο του οποίου συντονίζει το γωνιακό σύστημα (x «y») θα αντιστοιχεί στο συντεταγμένων στο ορθογώνιο σύστημα (με ίδια προέλευση μία γενική κατεύθυνση των αξόνων) έως (x, y).

Στο πρόβλημά σας, σας δίνεται (x, y), πρέπει να βρούμε (x «y») και, στη συνέχεια, να καταλάβω το τρίγωνο.

Αν i είναι η διανυσματική μονάδα κατά μήκος χ και ι η ορθογώνια κατά μήκος του y, τότε έχουμε ότι

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

(Βασικά η μονάδα φορέα κατά μήκος του «γωνία» ο άξονας γ είναι ί / 2 + sqrt (3) / 2 * ι. Το μοναδιαίο διάνυσμα κατά μήκος του άξονα χ είναι το ίδιο με το κανονικό χ-άξονα, δηλαδή ί).

Ετσι

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

Επίλυση δίνει:

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

Ας υποθέσουμε προς το παρόν αυτό το x «και y» είναι θετικές.

Τώρα, αν c = [x '], ο ακέραιος αριθμός x'

και r = [y '], ο ακέραιος αριθμός του Υ'

στη συνέχεια, στο (γωνιακή) πλέγμα, το σημείο βρίσκεται στη στήλη Cth και της σειράς rth. (Μετρώντας δεξιά και πάνω και αρχίζουν να μετρούν στους 0).

Έτσι έχουμε περιοριστεί το σημείο σας σε ένα παραλληλόγραμμο

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

Τώρα, για να μάθετε ποια τρίγωνο είναι για σας να εξετάσει τα κλασματικά μέρη των x «και y».

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

Τώρα,

αν {x} + {y} > 1, τότε το σημείο βρίσκεται στο τρίγωνο που σημειώνονται με *. αν {x} + {y} < 1, τότε το σημείο έγκειται στο άλλο τρίγωνο. αν {x} + {y} = 1, τότε το σημείο βρίσκεται επί της γραμμής που είναι κοινές στα δύο τρίγωνα.

Ελπίδα που βοηθά πάρα πολύ.

Απαντήθηκε 15/02/2010 στις 09:45
πηγή χρήστη

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