"Wegen" tussen coordinaten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • stefanf20
  • Registratie: November 2010
  • Laatst online: 14-09 20:39
Ik heb het volgende probleem en heb niet echt een idee hoe dit op te lossen. Voor een kaart binnen een gebouw heb ik x,y coordinaten. Nu wil ik tussen deze x,y coordinaten een lijn tekenen zodat je de 'wegen' krijgt binnen het gebouw.

Ik heb een XML bestand met daarin de x,y coordinaten. Hoe kan ik nu bepalen welke lijnen bij elkaar horen en hoe kan ik hier een lijn tussen tekenen? Bij kruispunten raak ik in de war en heb ik niet echt een idee hoe ik dit kan oplossen. Wie kan me op weg helpen?

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 15-09 23:08
Dus... Je wilt enkel een lijntje tekenen tussen 2 puntjes?

Aangeven met welke taal je werkt zou handig zijn. Meeste grafische omgevingen hebben wel een drawLine method.

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • stefanf20
  • Registratie: November 2010
  • Laatst online: 14-09 20:39
Ik wil inderdaad lijnen trekken tussen punten en dat snap ik ook wel hoe dat dat moet. Ik kom alleen in de knoop hoe je bepaald welk punt naast welke punt hoort. Ik heb een XML bestand met willekeurige punten. En hoe bepaal je hierin de kruispunten?

Acties:
  • 0 Henk 'm!

Verwijderd

Dat is gewoon simpele wiskunde:

y1 = a * b + c
y2 = a * b + c

y1 = y2

En dan heb je het kruispunt :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als ik je probleem goed begrijp is het probleem dus niet dat je lijnen moet trekken maar dat deze lijnen niet direct van A naar B gaan?

Verder: de taal waarin je programmeert en een betere omschrijving van je probleem lijken me wel wenselijk. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • stefanf20
  • Registratie: November 2010
  • Laatst online: 14-09 20:39
Voorbeeldje van wat bij mij nu mis gaat:
Afbeeldingslocatie: http://www.idea24.nl/voorbeeld.png
(schaal klopt niet helemaal maar idee is duidelijk)

Ik wil dus met een functie bepalen welke punten gekoppeld aan elkaar moeten worden dus bijvoorbeeld van punt (0,0) zou het resultaat worden:
(0,2),(-2,0),(0,-2),(2,0)

En van punt (-2,0):
(0,0)

Punt (0,2):
(0,0)

etc.

Alleen ik kijk nu dus als het punt een max verschil heeft van 2 dan wordt hij beschouwd als punt waar hij aan verbonden moet worden dus dan krijg je het probleem dat bij punt:
(0,2) hij verbonden wordt met:
(0,0)(2,0) en (-2,0)

Wat ik dus niet wil.

Programmeertaal C#

Acties:
  • 0 Henk 'm!

Verwijderd

nvm

[ Voor 96% gewijzigd door Verwijderd op 01-11-2010 11:21 ]


Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
stefanf20 schreef op maandag 01 november 2010 @ 11:18:
Voorbeeldje van wat bij mij nu mis gaat:
[afbeelding]
(schaal klopt niet helemaal maar idee is duidelijk)

Ik wil dus met een functie bepalen welke punten gekoppeld aan elkaar moeten worden dus bijvoorbeeld van punt (0,0) zou het resultaat worden:
(0,2),(-2,0),(0,-2),(2,0)

En van punt (-2,0):
(0,0)

Punt (0,2):
(0,0)

etc.

Alleen ik kijk nu dus als het punt een max verschil heeft van 2 dan wordt hij beschouwd als punt waar hij aan verbonden moet worden dus dan krijg je het probleem dat bij punt:
(0,2) hij verbonden wordt met:
(0,0)(2,0) en (-2,0)

Wat ik dus niet wil.

Programmeertaal C#
Kan je uitleggen waarom juist die specifieke punten niet gekozen mogen worden?
Wat gebruik je om de lijnen te tekenen? Gewoon GDI?

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • Flipke84
  • Registratie: Juli 2008
  • Laatst online: 09-11-2024
Je mag een punt alleen verbinden als het x of y coordinaat max 2 verschilt niet als beide verschillen (dit zijn de diagonalen).

Acties:
  • 0 Henk 'm!

  • TIGER79
  • Registratie: December 2001
  • Laatst online: 02-09 12:37
mag je ook een beschrijvende taal gebruiken ? bijv een SVG (wat uiteindelijk ook maar xml is) ?
of iets gebruiken in de vorm van multipolygonen ?

Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Flipke84 schreef op maandag 01 november 2010 @ 11:26:
Je mag een punt alleen verbinden als het x of y coordinaat max 2 verschilt niet als beide verschillen (dit zijn de diagonalen).
Dus gewoon afstand bereken (stelling van Pythagoras) tussen punten

http://www.purplemath.com/modules/distform.htm

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • E-Vix
  • Registratie: Juni 2000
  • Laatst online: 10:42

E-Vix

Nu met sneeuw!

Een punt ligt dus maximaal 2 van een ander punt af?
In je berekening kijk je volgens mij nu of je X of Y maximaal 2 verschilt. In plaats van een of te gebruiken moet je een en gebruiken.
Het verschil tussen (0,2) en (2,0) is 2 en 2. Tel dit bij elkaar op en je hebt in totaal een verschil van 4; oftewel geen lijn tekenen.

Failed opening '/home/users/7942/signature.inc' for inclusion (include_path='.:') in /home/www/got/userstats.php on line 25


Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

@E-Vix: en wat dan met (0,0) en (1,1), dat komt bij jou ook op 2 uit ;)

Pseudocode die uitgaat van integer punten, losse hand C#
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
List<Punt> punten = LeesXMLOfzo();
for(int i = 0; i < punten.Count; i++)
{
  for(int j = i + 1; j < punten.Count; j++)
  {
    Punt punt1 = punten[i];
    Punt punt2 = punten[j];
    int dx = Math.Abs(punt1.x - punt2.x);
    int dy = Math.Abs(punt1.y - punt2.y);
    if((dx > 0 || dy > 0) && ((dx <= 2 && dy == 0) || (dx == 0 && dy <= 2))) TekenLijn(punt1, punt2);
    /*of met Pythagoras, vervang bovenstaande 3 regels met: 
    int dx = punt1.x - punt2.x;
    int dy = punt1.y - punt2.y;
    int val = dx * dx + dy * dy;
    if(val == 4 || val == 1) TekenLijn(punt1, punt2);
    */
  }
}

[ Voor 20% gewijzigd door MLM op 01-11-2010 14:13 ]

-niks-

Pagina: 1