Afstand tussen 2 punten berekenen
Door Mike , 21 jaar geleden, 8.368x bekeken
Gesponsorde koppelingen
PHP script bestanden
Er zijn 3 reacties op 'Afstand tussen 2 punten berekenen'
Gesponsorde koppelingen
Ik vind hem zo mooier :-P
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
/**
* float afstand ( array $aCoords )
* float afstand ( float $iX1 , float $iY1 , float $iX2 , float $iY2 )
*
* De afstand berekenen tussen 2 coordinaten
*/
function afstand ( )
{
/**
* We stoppen alle meegegeven argumenten in de array $a
*/
$a = func_get_args ( );
/**
* Als het eerste argument een array is dan zijn dat de coordinaten
*/
if ( is_array ( $a [ 0 ] ) )
{
$a = $a [ 0 ];
/**
* Als de key 0 of 1 ontbreekt returnen we false, want dan klopt er iets niet
* dus returnen we false
*/
if ( !array_key_exists ( 0 , $a ) OR !array_key_exists ( 1 , $a ) OR !array_key_exists ( 0 , $a [ 0 ] ) OR !array_key_exists ( 1 , $a [ 0 ] ) OR !array_key_exists ( 0 , $a [ 1 ] ) OR !array_key_exists ( 1 , $a [ 1 ] ) )
return false;
$aCoords = $a;
}
/**
* Anders zijn de coordinaten over meerdere argumenten "verspreid" en maken we
* de array zelf
*/
else
{
if ( !isset ( $a [ 0 ] ) OR !isset ( $a [ 1 ] ) OR !isset ( $a [ 2 ] ) OR !isset ( $a [ 3 ] ) )
return false;
$aCoords = array
(
array ( $a [ 0 ] , $a [ 1 ] ) ,
array ( $a [ 2 ] , $a [ 3 ] )
);
}
/**
* De verschillen uitrekenen: delta x en delta y
*/
$iDeltaX = $aCoords [ 1 ] [ 0 ] - $aCoords [ 0 ] [ 0 ];
$iDeltaY = $aCoords [ 1 ] [ 1 ] - $aCoords [ 0 ] [ 1 ];
/**
* De afstand in het kwadraat, is $iDeltaX in het kwadraat plus $iDeltaY in
* kwadraat.
*/
$iAfstandKwadraat = pow ( $iDeltaX , 2 ) + pow ( $iDeltaY , 2 );
/*
* We returnen de wortel van het kwadraat
*/
return sqrt ( $iAfstandKwadraat );
}
?>
/**
* float afstand ( array $aCoords )
* float afstand ( float $iX1 , float $iY1 , float $iX2 , float $iY2 )
*
* De afstand berekenen tussen 2 coordinaten
*/
function afstand ( )
{
/**
* We stoppen alle meegegeven argumenten in de array $a
*/
$a = func_get_args ( );
/**
* Als het eerste argument een array is dan zijn dat de coordinaten
*/
if ( is_array ( $a [ 0 ] ) )
{
$a = $a [ 0 ];
/**
* Als de key 0 of 1 ontbreekt returnen we false, want dan klopt er iets niet
* dus returnen we false
*/
if ( !array_key_exists ( 0 , $a ) OR !array_key_exists ( 1 , $a ) OR !array_key_exists ( 0 , $a [ 0 ] ) OR !array_key_exists ( 1 , $a [ 0 ] ) OR !array_key_exists ( 0 , $a [ 1 ] ) OR !array_key_exists ( 1 , $a [ 1 ] ) )
return false;
$aCoords = $a;
}
/**
* Anders zijn de coordinaten over meerdere argumenten "verspreid" en maken we
* de array zelf
*/
else
{
if ( !isset ( $a [ 0 ] ) OR !isset ( $a [ 1 ] ) OR !isset ( $a [ 2 ] ) OR !isset ( $a [ 3 ] ) )
return false;
$aCoords = array
(
array ( $a [ 0 ] , $a [ 1 ] ) ,
array ( $a [ 2 ] , $a [ 3 ] )
);
}
/**
* De verschillen uitrekenen: delta x en delta y
*/
$iDeltaX = $aCoords [ 1 ] [ 0 ] - $aCoords [ 0 ] [ 0 ];
$iDeltaY = $aCoords [ 1 ] [ 1 ] - $aCoords [ 0 ] [ 1 ];
/**
* De afstand in het kwadraat, is $iDeltaX in het kwadraat plus $iDeltaY in
* kwadraat.
*/
$iAfstandKwadraat = pow ( $iDeltaX , 2 ) + pow ( $iDeltaY , 2 );
/*
* We returnen de wortel van het kwadraat
*/
return sqrt ( $iAfstandKwadraat );
}
?>
Deze is ietsje mooier vind ik. Is net wat korter, gebruikt niet van die rare onlogische array constructies, en is uitbreidbaar tot zoveel dimensies als de maximale lengte van een php array. (Da's best veel dimensies).
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
/**
* float afstand ( array $aCoords, $bCoords )
*
* Example:
* afstand(array(1,2), array(0,9)
* maar ook: afstand(array(1,2,5), array(1,6,8))
* of een afstand in een 5 dimensionale ruimte..
* afstand(array(1,7,2,6,9), array(1,0,2,3,4),
*
* De afstand berekenen tussen 2 coordinaten ongeacht het aantal dimensies
*/
function afstand ( )
{
/**
* Argumenten
*
*/
list($a,$b) = func_get_args ( );
if (!is_array($a) || !is_array($b) || count($a) != count($b)) {
return false;
// throw error
}
/**
* De verschillen uitrekenen per dimensie: delta
*/
$fDistance = (float) 0;
for ($i = 0; $i < count($a); $i++) {
$fDistance += pow($a[$i] - $b[$i], 2);
}
/*
* We returnen de wortel van het kwadraat
*/
return sqrt ( $fDistance);
}
?>
/**
* float afstand ( array $aCoords, $bCoords )
*
* Example:
* afstand(array(1,2), array(0,9)
* maar ook: afstand(array(1,2,5), array(1,6,8))
* of een afstand in een 5 dimensionale ruimte..
* afstand(array(1,7,2,6,9), array(1,0,2,3,4),
*
* De afstand berekenen tussen 2 coordinaten ongeacht het aantal dimensies
*/
function afstand ( )
{
/**
* Argumenten
*
*/
list($a,$b) = func_get_args ( );
if (!is_array($a) || !is_array($b) || count($a) != count($b)) {
return false;
// throw error
}
/**
* De verschillen uitrekenen per dimensie: delta
*/
$fDistance = (float) 0;
for ($i = 0; $i < count($a); $i++) {
$fDistance += pow($a[$i] - $b[$i], 2);
}
/*
* We returnen de wortel van het kwadraat
*/
return sqrt ( $fDistance);
}
?>
Om te reageren heb je een account nodig en je moet ingelogd zijn.
Inhoudsopgave
Labels
- Geen tags toegevoegd.
PHP hulp
0 seconden vanaf nu