xristos05 Δημοσ. 16 Μαρτίου 2013 Δημοσ. 16 Μαρτίου 2013 Καλησπέρα, θέλω τα φωτα σας κυριως στα μαθηματικα. Εχω 2 ευθυγραμμα τμήματα τα οποια αλλάζουν αλλα πάντα ξερω τις συνεταγμένες τους x1.y1, x2.y2, x3.y3, x4.y4 ολα αυτά τα εχω βάλει πανω σε ενα google map για να μπορεσω να το ελεγξω αν δουλευει σωστα, το χρειάζομαι σε c# απλα πιστεύω οτι ειναι ενας τροπος για να γινει ελεγχος ομαλης λειτουργειας. επισυναπτω το html που εκτελει εχω 2 var temp η μια δουλευει κανονικα και βγαζει σωστο αποτέλεσμα η αλλη οχι να πω οτι ο κωδικας που χρησιμοποιησα τον βρηκα στο internet δε θυμαμαι το σιτε γιατι παει καιρος, αλλα δεν δουλευει 100% παρατηρησα οτι οταν τα 2 ευθ. τμηματα εχουν πολυ μικρη γωνια (που τεμνονται) τοτε βγαζει οτι δεν τεμνονται ενω συμβαινει το αντιθετο. ρωτησα ενα γνωστο μαθηματικο και μου εγραψε ποτε 2 ευθυγραμμα τμηματα τεμνονται αλλα δεν ξερει απο προγραμματισμο και εγω δεν μπορω να το μετατρεψω σε κωδικα γιατι στο τελος μου εχει κατι συνθηκες με συνολα και τετοια. περα απο αυτο νομιζω οτι δεν εκτελειται σωστα και πολυ πιο πριν απο τα συνολα επισυναπτω και την φωτογραφια και οποιος μπορει ας βοηθησει γιατι δε ξερω τι αλλο να ψαξω Ευχαριστω πολυ line_crossed_by_line.html
albNik Δημοσ. 16 Μαρτίου 2013 Δημοσ. 16 Μαρτίου 2013 Δοκιμασμένο bool Intersects(long x1, long y1, long x2, long y2, long x3, long y3, long x4, long y4) { long denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); if(denom == 0) return false; // parallel long numS = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3); long numT = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3); if((numS <= 0) || (denom <= numS) || (numT <= 0) || (denom <= numT)) return false; return true; }
Technology fan Δημοσ. 16 Μαρτίου 2013 Δημοσ. 16 Μαρτίου 2013 Δοκιμασμένο bool Intersects(long x1, long y1, long x2, long y2, long x3, long y3, long x4, long y4) { long denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); if(denom == 0) return false; // parallel long numS = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3); long numT = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3); if((numS <= 0) || (denom <= numS) || (numT <= 0) || (denom <= numT)) return false; return true; } Από τι καταλαβαίνω αυτό λύνει τομή ευθειών! Ενώ τα ευθύγραμμα τμήματα έχουν πεπερασμένο μήκος. Ίσως να μπορεί να λυθεί και πιο απλά το πρόβλημα...
albNik Δημοσ. 16 Μαρτίου 2013 Δημοσ. 16 Μαρτίου 2013 Για τμήματα λύνει. Για ευθείες αρκει να ελέγξεις μόνο αν ειναι παράλληλες (denom=0).
Technology fan Δημοσ. 16 Μαρτίου 2013 Δημοσ. 16 Μαρτίου 2013 Για τμήματα λύνει. Για ευθείες αρκει να ελέγξεις μόνο αν ειναι παράλληλες (denom=0). Βασικά ναι δίκιο έχεις... Αλλά εξήγησε μου τι κάνω λάθος στο εξής παράδειγμα... Έστω ότι δυο τμήματα με κοινή αρχή αλλά διαφορετικό τέλος, Άρα x1=x3 και y1=y3. Το τέλος μου είναι αδιάφορο εφόσον το σημείο τομής είναι η αρχή! Επομένως numS=0 και numΤ=0 άρα ισχύει η συνθήκη του if και επιστρέφει false, ενώ κανονικά τέμνονται στο σημείο (x1,y1) Μήπως δεν θα πρεπε στις συνθήκες να υπάρχει το '=' ??
albNik Δημοσ. 16 Μαρτίου 2013 Δημοσ. 16 Μαρτίου 2013 Σωστά, όταν τέμνονται οριακά ίσως πρέπει να φύγει κάποιο "=".
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα