PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eine von 4 Parzellen im Rechteck ?


tuna
06.10.2002, 19:28
Hallo....

hat jemand ne Idee wie ich in einem beliebigen Rechteck die Parzellen_Nummern rausbekomm, wenn diese durch 2 sich schneidende Diagonalen definiert sind? Ohne Winkelfunktionen und Phytagoras? Das ganze im Koordinatensystem (x,y)...

\--------------------/
-\------------------/-
--\----------------/--
---\--------------/---
----\------------/----
-----\----------/-----
------\--------/------
-------\------/-------
--------\----/--------
---------\--/---------
----------\/----------
----------/\----------
---------/--\---------
--------/----\--------
-------/------\-------
------/--------\------
-----/----------\-----
----/------------\----
---/--------------\---
--/----------------\--
-/------------------\-
/--------------------\

...könnte dann nämlich so ein pseudo_3D_Gitternetz (z.B. Sim City...) handlen.... :)
Oder falls jemand das ganze besser lösen kann ( true 3D ) wär ich für Vorschläge, Gedanken, Tips und Tricks recht dankbar...

Thx, Tuna


Jan Krüger
06.10.2002, 21:12
welche nummern genau willst du rausfinden und warum willst du die genannten mittel nicht einsetzen?

tuna
06.10.2002, 23:06
\--------------------/
-\------------------/-
--\--------1------/--
---\--------------/---
----\------------/----
-----\----------/-----
------\--------/------
-------\------/-------
--------\----/--------
---------\--/---------
----0----\/-----2----
----------/\----------
---------/--\---------
--------/----\--------
-------/------\-------
------/--------\------
-----/----------\-----
----/------------\----
---/-------3-----\---
--/----------------\--
-/------------------\-
/--------------------\

... ich möcht das ganze so einfach wie möglich halten, damit ich die Rechenzeit für die Mouse_Abfrage so gering wie möglich halten kann...will eigentlich nur rausbekommen, über welcher Parzelle die Mouse gedrückt wurde....
.... und ich denk mal, dass es da kleine Tricks & Kniffe gibt, die das ganze ohne aufwendige Berechnungen schaffen .. (?) ..

wenn ich z.B. die x- und y-Koordinate in einem Viereck jeweils miteinander dividiere bekomm ich jeweils eine Seite raus:
entweder >1 oder <1 .... halt nur in einem Viereck und eine Diagonale ....

\------------------ 0/0 1/0 2/0 3/0 ...
---\---------1---- 0/1 1/1 2/1 3/1 ...
------\------------ 0/2 1/2 2/2 3/2
---------\--------- .....
------------\------
---0----------\---
----------------- \

... wenn ich die Koords dann Spiegel, bekomm ich die umgekehrte Diagonale .... aber das is ja nich was ich will --> will ja das ganze in einem beliebigen Rechteck...
...falls es da wirklich keinen anderen Lösungsansatz geben sollte, würd ich das ganze auch über Winkelfunktionen,sqrt oder Phytagoras lösen...

Jan Krüger
07.10.2002, 00:28
w: breite des rechtecks
h: höhe des rechtecks
(x,y): koordinaten punkt
int get_parzelle(int w, int h, int x, int y)
{
double m = w/h;
if (x > (y*m)) {
if ((w-x) < (y*m))
return 2;
else
return 1;
} else {
if ((w-x) < (y*m))
return 3;
else
return 0;
}
/* diese codestelle sollte eigentlich nie angelaufen werden ;) */
return -1;
}

tuna
07.10.2002, 07:57
yo, thx a lot .... x)
:o :o :o (x

tuna
07.10.2002, 13:10
schade - irgendwie funktioniert das ganze nicht so ganz...
...

Jan Krüger
07.10.2002, 13:51
waren ein paar kleine fehler drin. habs korrigiert. ich hoffe, es geht jetzt. :rolleyes:

tuna
07.10.2002, 14:00
:) hab zwar m auch mal umgekehrt berechnet und ein paar >< verdreht, aber nie richtig .... :)

auf welche mathematische basis ist das ganze denn zu begründen ? ( zum besseren verständnis )

danke, tuna ...

Jan Krüger
07.10.2002, 18:49
die mathematische basis ist:
wenn die steigung von (0,0)->(x,y) größer ist als die der diagonale (0,0)->(w,h), dann befindet sich der punkt entweder in parzelle 1 oder 2, sonst in 0 oder 3.
wenn die steigung von (w,0)->(x,y) kleiner ist als die der diagonale (0,h)->(w,0), dann befindet sich der punkt entweder in parzelle 0 oder 1, sonst in 2 oder 3.
wenn man das geeignet kombiniert, kann man die genaue parzelle ermitteln.