PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Berechnungsfehler vom Prof?


Früchtemüsli
2013-09-10, 15:39:29
Hi :)

Ich versuche, eine Berechnung eines Professors nachzuvollziehen. Aber egal, was ich versuche, ich komme nicht auf sein Ergebnis. Ich habe es mit einer grafischen Skizze versucht und ich habe es auch schon mit einem Programm versucht. Aber ich bekomme immer was ganz anderes.

Es geht um http://www-lehre.inf.uos.de/~cg/2012/, Vorlesung vom Mo, 04.06. Und zwar geht es um das clipping in den camera-coordinates. Seiten 12 und 13 in der PDF oder von Minute 12 bis 18 in den Videos (z. B opencast). Und zwar geht es um dieses t(s).

Bei ihm ist es ungefähr 0.01. Bei mir ist es ungefähr 0.005.

Versteh ich das alles falsch oder hat da der Prof tatsächlich einen Rechenfehler gemacht?

Hier übrigens mein Test-Programm:


<?php
error_reporting(~0);

class Vector
{
public $x;
public $y;
public $z;
public $w;
function __construct($x, $y, $z, $w = 0)
{
$this->x = $x;
$this->y = $y;
$this->z = $z;
$this->w = $w;
}
/**
* ignoriert w
*/
function length()
{
return sqrt
(
pow($this->x, 2) +
pow($this->y, 2) +
pow($this->z, 2)
);
}
/**
* ignoriert w
*/
function normalize()
{
$l = $this->length();
return new Vector
(
$this->x / $l,
$this->y / $l,
$this->z / $l
);
}
}

class Line
{
public $v0;
public $v1;
function __construct(Vector $v0, Vector $v1)
{
$this->v0 = $v0;
$this->v1 = $v1;
}
}

class Plane
{
public $a;
public $b;
public $c;
public $d;
/**
* @param Vector $n normalisierte Normale, zeigt nach oben (innen)
* @param number $d
* @throws Exception
*/
function __construct(Vector $n, $d)
{
if($n->w != 0)
throw new Exception('n');

$this->a = $n->x;
$this->b = $n->y;
$this->c = $n->z;
$this->d = $d;
}
function intersectWithLine(Line $line)
{
$v0 = $line->v0;
$v1 = $line->v1;

$x0 = $v0->x;
$y0 = $v0->y;
$z0 = $v0->z;

$x1 = $v1->x;
$y1 = $v1->y;
$z1 = $v1->z;

$p =
($x1 - $x0) * $this->a +
($y1 - $y0) * $this->b +
($z1 - $z0) * $this->c;
if($p == 0)
return null;

$t = -($x0 * $this->a + $y0 * $this->b + $z0 * $this->c + $this->d) / $p;
if($t < 0 || $t > 1)
return false;

var_dump($t);

return new Vector
(
$x0 + $t * ($x1 - $x0),
$y0 + $t * ($y1 - $y0),
$z0 + $t * ($z1 - $z0),
1
);
}
}

$data =
[
// ein eigener Test:
[
[-4, -3, 0], // Ebenen-Normale
5, // Ebene d
[1.5, 3, 0], // Linie Punkt a
[4.5, 9, 0], // Linie Punkt b
[2.5, 5, 0] // Schnittpunkt
],
// Daten aus der UNI-Vorlesung:
[
[-0.001, 0, -0.0005], // Ebenen-Normale (near, 0, -right)
0, // Ebene d
[0, 0, -0.01], // Linie Punkt a
[1, 0, -0.05], // Linie Punkt b
[1, 2, 3] // Schnittpunkt??
]
];

foreach($data as $test)
{
// Normale auf Ebene:
$n = new Vector($test[0][0], $test[0][1], $test[0][2]);
$n = $n->normalize();

// Ebene:
$plane = new Plane($n, $test[1]);

// Gerade:
$line = new Line(new Vector($test[2][0], $test[2][1], $test[2][2], 1), new Vector($test[3][0], $test[3][1], $test[3][2], 1));

// Ebene mit Gerade schneiden:
$s = $plane->intersectWithLine($line);
var_dump($s);
}
?>

universaL
2013-09-10, 17:03:47
Moin,

ohne jetzt deinen Code/die Folien angeschaut zu haben: Hat dein Prof vlt einfach auf 2 Kommastellen, anstatt auf 3 gerundet?

Früchtemüsli
2013-09-10, 18:14:31
Der hat das eh auf mehrere Nachkommastellen hingeschrieben. Steht eh auf seinen Folien und in der PDF. War nur von mir gerundet.

Pinoccio
2013-09-10, 18:57:23
Es geht um http://www-lehre.inf.uos.de/~cg/2012/, Vorlesung vom Mo, 04.06. Und zwar geht es um das clipping in den camera-coordinates. Seiten 12 und 13 in der PDF oder von Minute 12 bis 18 in den Videos (z. B opencast). Und zwar geht es um dieses t(s).

Bei ihm ist es ungefähr 0.01. Bei mir ist es ungefähr 0.005.

Versteh ich das alles falsch oder hat da der Prof tatsächlich einen Rechenfehler gemacht?bekommst du denn auch seine ganzen Zwischenergebnisse so raus?

mfg

Früchtemüsli
2013-09-10, 19:07:36
Da gibts keine Zwischenergebnisse in der Vorlesung. Nur das Endergebnis :)

Ganon
2013-09-10, 19:46:41
Warum fragst du nicht einfach den Prof?

Früchtemüsli
2013-09-10, 20:11:53
Ich studiere nicht an der Uni Osnabrück. Ich schau mir nur deren Videos an. Wenns geht, will ich es vermeiden, die Profs zu kontaktieren. Einen anderen Prof aus dem SS 2010 hab ich schon via E-Mail auf einen kleinen Flüchtigkeitsfehler hingewiesen (hat er mir schon bestätigt), aber bei Fragen will ich mich möglichst zurückhalten :)