Studium, Ausbildung und Beruf
 StudiumHome   FAQFAQ   RegelnRegeln   SuchenSuchen    RegistrierenRegistrieren   LoginLogin

Formel gesucht
Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12  Weiter
Neues Thema eröffnen   Neue Antwort erstellen
Foren-Übersicht -> Mathe-Forum -> Formel gesucht
 
Autor Nachricht
algebrafreak
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 28.10.2004
Beiträge: 4143
Wohnort: Passau

BeitragVerfasst am: 14 Jun 2005 - 22:52:06    Titel:

Wie schaut denn die Karte dazu aus? Poste doch bitte nochmal den modifizierten Code mit der Formel von oben.
progs
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 13.06.2005
Beiträge: 61

BeitragVerfasst am: 15 Jun 2005 - 09:56:43    Titel:

Hier mal der PHP-Code. $object_info[0] - [3] Sind die x/y Positonen der Objekte.

Code:
for($i = 1; $i <= $resolution[0]; $i++) {
   for($i2 = 0; $i2 < count($map_objects[0]); $i2++) {
      //echo($map_objects[0][$i2][0]." ");
      $object_info = explode(",", $map_objects[0][$i2][0]);
      
      $dx0    = cos($degree - ($degree_step * $i));
      $dy0    = sin($degree - ($degree_step * $i));
      $x0    = 0;
      $y0      = 0;
      $dx1    = $object_info[2] - $object_info[0];
      $dy1   = $object_info[3] - $object_info[1];
      $x1      = $object_info[0];
      $y1      = $object_info[1];
      
      if($dx1 * $dy0 - $dx0 * dy1 != 0) {
         $alpha = ($x0 * $dy1 - $y0 * $dx1 - $x1 * $dy1 + $y1 * $dx1) / ($dx1 * $dy0 - $dx0 * $dy1);
           $beta  = ($x0 * $dy0 - $y0 * $dx0 - $x1 * $dy0 + $y1 * $dx0) / ($dx1 * $dy0 - $dx0 * $dy1);

         if($beta <= 1 && $beta >= 0 && $alpha >= 0) {
            // Halbe Höhe errechnen
            $height = $res_height[1] * $alpha / 2;
            // Linie zeichnen
            imageline($img, $i, $res_height[1] - $height, $i, $res_height[1] + $height, $nontexturecolor);
         }
      }
   }
}


als Objekte gibt es im Moment nur 1, und das sieht folgendermaßen aus (x1, y1, x2, y2):

Code:
<rectangle>0,300,300,300</rectangle>
algebrafreak
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 28.10.2004
Beiträge: 4143
Wohnort: Passau

BeitragVerfasst am: 15 Jun 2005 - 16:00:46    Titel:

Es gibt nun mehrere Fehlerquellen. Ich gehe davon aus, daß Du die Formeln richtig eingegeben hast und die Objekte ebenfalls. Die auskommentiere Zeile sagt mir, daß Du die Objekte schon angeschaut hast. Am besten hacken Wir langsam alle durch. Ich sehe PHP-Code leider zum ersten mal im Leben. Daher stelle ich mal ein paar Sachen in die Luft:

- Prüfe, ob die sin und cos Funktion Winkel oder Radian als §ingabe haben will. Dazu mußt Du einmal sin(3.14), sin(360), cos(3.14) und cos(360) ausrechnen und mir sagen (die zwei letzten Werte dienen als Sicherheit).

- Deine Strahlenmethode ist nicht ganz ok. Der Algorrithmus ist ja für deinen Richtungswinkel a:

for (int i = -160; i < 160; i++) {

dx = cos(Winkel(al+i))
dy = sin(Winkel(al+i))

}

Dabei rechnet "Winkel()" eben den zum Strahl passenden Winkel aus. Sonst müsstest Du deinen Winkel als Winkel(-160) angeben!

Ich denke mir nichts mehr aus, damit wir Schritt für Schritt alles durchgehen. Es würde sich für Dich lohnen am Rechner zu bleiben, damit es schneller geht.
progs
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 13.06.2005
Beiträge: 61

BeitragVerfasst am: 15 Jun 2005 - 16:34:42    Titel:

Cosinus- und Sinuswerte: http://test.bauer-martin.com/3d/test.php

Die For-Schleife ist entsprechend abgeändert. Nur was Du mit "Winkel(al+i)" meinst, ist mir noch nicht ganz klar.
algebrafreak
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 28.10.2004
Beiträge: 4143
Wohnort: Passau

BeitragVerfasst am: 15 Jun 2005 - 16:39:54    Titel:

Also Radian. Sag mir doch die Werte von $degree und $degreestep

Diese Zeile (erste) solltest Du mal abändern in

Code:

for($i = -$resolution[0]/2; $i < $resolution[0]/2; $i++) {
progs
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 13.06.2005
Beiträge: 61

BeitragVerfasst am: 15 Jun 2005 - 16:43:02    Titel:

$degree = 90
$degreestep = 90 / 320

die For-Schleife ist bereits abgeändert.
algebrafreak
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 28.10.2004
Beiträge: 4143
Wohnort: Passau

BeitragVerfasst am: 15 Jun 2005 - 16:45:26    Titel:

Da haben wir schon deinen Wurm. 90° entsprechen PI/4. D.h. degree = 3.14 / 4 (oder PI statt 3.14, wenn es das in PHP gibt). und Degreestep = (90/320) * PI/180. Jetzt müsste es gehen.

Du wirst mit 90° vermutlich irgendwo anders gucken. Der Winkelfehler hat sich bemerkbar gemacht, da die Streifen in regelmäßigen Abständen sich wiederholt haben. Du wirst auch vermutlich jetzt nur magenta (oder wie es heißt) vor Dir sehen, da Du die Objekte "kleiner" machen mußt.

Bin schon gespannt auf dein mini DOOM!


Zuletzt bearbeitet von algebrafreak am 15 Jun 2005 - 16:47:51, insgesamt einmal bearbeitet
progs
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 13.06.2005
Beiträge: 61

BeitragVerfasst am: 15 Jun 2005 - 16:47:50    Titel:

Nunja, nicht so wirklich.

http://test.bauer-martin.com/3d/engine.php

Schaut aber schonmal besser aus als vorher.
algebrafreak
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 28.10.2004
Beiträge: 4143
Wohnort: Passau

BeitragVerfasst am: 15 Jun 2005 - 16:49:19    Titel:

Poste bitte nochmal den Code. (am besten mit den initialisierungswerten für alle variablen). Platz ist ja da:)
progs
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 13.06.2005
Beiträge: 61

BeitragVerfasst am: 15 Jun 2005 - 16:57:00    Titel:

Code:

<?php
// XML Parser einbinden
include_once("xml-line.php");

// Engine Config öffnen
$engine_conf = new xml_line("engine_config.xml");
$engine_conf->get_data(0, "resolution");
$result = $engine_conf->xml_stream();
$resolution = explode(",", $result[0][0][0]);

$res_height[0] = $resolution[1];
$res_height[1] = $resolution[1] / 2;

// XML-Datei öffnen
$mapdata = new xml_line("map.xml");

$degree = 90;
$degree_step = ($degree / $resolution[0]) * (M_PI / 180);

// Mapobjekte auslesen
$mapdata->get_data(0, "rectangle");
$map_objects = $mapdata->xml_stream();

// Bild erzeugen
header("Content-type: image/png");
$img = imagecreatetruecolor($resolution[0], $resolution[1]);
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
$red = imagecolorallocate($img, 180, 0, 0);
imagefill($img, 0, 0, $black);
imagefilledrectangle($img, 0, 0, $resolution[0], $resolution[1] / 2, $red);
$nontexturecolor = imagecolorallocate($img, 0, 153, 153);

for($i = ($resolution[0] / 2) * -1; $i < $resolution[0] / 2; $i++) {
   for($i2 = 0; $i2 < count($map_objects[0]); $i2++) {
      $object_info = explode(",", $map_objects[0][$i2][0]);
      
      $dx0    = cos($degree - ($degree_step * $i));
      $dy0    = sin($degree - ($degree_step * $i));
      $x0    = 0;
      $y0      = 0;
      $dx1    = $object_info[2] - $object_info[0];
      $dy1   = $object_info[3] - $object_info[1];
      $x1      = $object_info[0];
      $y1      = $object_info[1];
      
      if($dx1 * $dy0 - $dx0 * dy1 != 0) {
         $alpha = ($x0 * $dy1 - $y0 * $dx1 - $x1 * $dy1 + $y1 * $dx1) / ($dx1 * $dy0 - $dx0 * $dy1);
           $beta  = ($x0 * $dy0 - $y0 * $dx0 - $x1 * $dy0 + $y1 * $dx0) / ($dx1 * $dy0 - $dx0 * $dy1);

         if($beta <= 1 && $beta >= 0 && $alpha >= 0) {
            // Halbe Höhe errechnen
            $height = $res_height[1] * $alpha / 2;
            // Linie zeichnen
            imageline($img, $i + 160, $res_height[1] - $height, $i + 160, $res_height[1] + $height, $nontexturecolor);
         }
      }
   }
}

// Bild ausgeben
imagepng($img);
// Resourcen freigeben
imagedestroy($img);
?>
Beiträge der letzten Zeit anzeigen:   
Foren-Übersicht -> Mathe-Forum -> Formel gesucht
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12  Weiter
Seite 3 von 12

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

Chat :: Nachrichten:: Lexikon :: Bücher :: Impressum