Gå til innhold

Anbefalte innlegg

Jeg sitter her med masse data jeg skal sortere og noe av dette er 3-dimensjonale kartesiske koordinater, (X, Y, Z), fordi jeg er lat og liker enkle løsninger lurer jeg på om jeg kunne legge dette inn i en string, og redigere dette sener slik:

programOne
{
  string coords = "-24,2;34,7;-0,345";
  double GetY(coords); //equals 34,7
  editX(coords, +5); //equals 29,2
}

 

Dette er bare psudokode men bør være forståelig for de fleste.

 

jeg trenger bare en henvinsing til hvordan dette kan gjøres.

 

takk!!

 

-frank

Lenke til kommentar
Videoannonse
Annonse

string.split() er det du er ute etter:

double doubleFromString(string cords, int num)
{
return double.Parse(cords.split(";")[num]);
}

double getX(string cords)
{
return doubleFromString(cords, 0);
}
double getY(string cords)
{
return doubleFromString(cords, 1);
}
double getZ(string cords)
{
return doubleFromString(cords, 2);
}

 

når det kommer til edit så er det letteste å bare splitte den opp først til doubles, endre verdien og så gjøre det tilbake til string igjen. Men dette vil ikke være veldig effektivt.

Endret av etse
  • Liker 1
Lenke til kommentar

string.split() er det du er ute etter:

double doubleFromString(string cords, int num)
{
return double.Parse(cords.split(";")[num]);
}

double getX(string cords)
{
return doubleFromString(cords, 0);
}
double getY(string cords)
{
return doubleFromString(cords, 1);
}
double getZ(string cords)
{
return doubleFromString(cords, 2);
}

 

når det kommer til edit så er det letteste å bare splitte den opp først til doubles, endre verdien og så gjøre det tilbake til string igjen. Men dette vil ikke være veldig effektivt.

Supert!!

 

Var akkurat hva jeg så etter!!!

 

takk!!

 

-frank

Lenke til kommentar

Det er en ganske stor bug i koden over som du kommer til å brenne deg på. Desimalskilletegn er kun komma på Norsk. I nær sagt alle andre kulturer vil den koden feile.

Bruk double.Parse(blablabla, CultureInfo.InvariantCulture) og benytt punktum istedet (som er desimalskilletegnet for InvariantCulture)

Eventuelt kan du alltid benytte Norsk kultur (istedet for den som er definert for systemet) eller lage din egen CultureInfo.

Kan også være en fordel å dytte dette inn i en struktur for å hindre overhead som parsingen vil føre med seg.

 

public struct Coord
{
 public double X;
 public double Y;
 public double Z;
 public static Coord Parse(string input)
 {
   var coords = input.Split(";");
   return new Coord()
   {
     X = double.Parse(coords[0].Trim(), CultureInfo.InvariantCulture),
     Y = double.Parse(coords[0].Trim(), CultureInfo.InvariantCulture),
     Z = double.Parse(coords[0].Trim(), CultureInfo.InvariantCulture)
   }
 }
 public override string ToString()
 {
   // Skal returnere "X; Y; Z" med InvariantCultureInfo
   return string.Join("; ", new double[] {X, Y, Z}.Select(v => v.ToString(CultureInfo.InvariantCulture));
 }
}

Lenke til kommentar
  • 4 uker senere...

ser for med at du kan bruke Vector3 fra XNA

Vector3 kordinat = new Vector3(X,Y,Z);
float xCord = kordinat.X;
float yCord = kordinat.Y;
float zCord = kordinat.Z;

 

eller så kan du jo ta i bruk 2dimensjons liste

List<int[3]> kordListe = new Liste<int[3]>();
int[3] kordinat= [1,2,3];
kordListe.add(kordinat);

 

Du burde prøve å ikke bruke en streng slik som du ønsked 3d er ikke spessiet vanskeligere en å jobbe med lister eller enkle ints for den saks skyld. det finnes egne variabler for posisjoner.

Endret av angeland89
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...