PHP X, Y Пересечение Линии

Я обещаю, что пытался найти это по всей сети, и я не могу заставить это работать. Если у меня есть исходная точка (XY) и я хочу нарисовать линию (X2Y2).

Я хочу нарисовать линию только для (X2Y2), если нет другой линии, идущей из (X3Y3) и (X4Y4), которая пересекает (XY) (X2Y2). У меня есть массив значений XY, которые отслеживают, где находятся линии.

Независимо от того, как я подхожу к проблеме, линии не распознаются как пересекающиеся. Я не лучший в мире эксперт по программированию на PHP, поэтому приношу свои извинения за мой ужасный фрагмент кода.

Любая помощь, которую вы можете оказать, будет очень полезна.

//  Loop through previous array points
//
$tmp_cross_total    = 0;
$tmp_cross          = 0;
$ary_tmp_x_o        = explode(",",$string_x);
$ary_tmp_y_o        = explode(",",$string_y);
$tmp_count_xyz      = count($ary_tmp_x_o);

//  Line Segment 'THIS'
//
$tmp_str_this_x_e = $tx_c;
$tmp_str_this_y_e = $ty_c;
$tmp_str_this_x_o = end($ary_tmp_x_o);
$tmp_str_this_y_o = end($ary_tmp_y_o);
//echo 'i:'.$i.', xyz: '.$xyz.' Ls THIS: Xo:'.$tmp_str_this_x_o.', Yo:'.$tmp_str_this_y_o.' ==> Xe: '.$tmp_str_this_x_e.', Ye: '.$tmp_str_this_y_e."\r\n";

//  We do NOT need to check A,C,E, or G points for crossing
//
if($x_d == 1 AND $y_d == -1 ) {
//  H
$direction = 'H';
$line_other_xo  = $tmp_str_this_x_e - $segment_length;
$line_other_yo  = $tmp_str_this_y_e + 0;
$line_other_xe  = $tmp_str_this_x_e + 0;
$line_other_ye  = $tmp_str_this_y_e + $segment_length;
}
if($x_d == 1 AND $y_d == 1 ) {
//  B
$direction = 'B';
$line_other_xo  = $tmp_str_this_x_e + 0;
$line_other_yo  = $tmp_str_this_y_e - $segment_length;
$line_other_xe  = $tmp_str_this_x_e - $segment_length;
$line_other_ye  = $tmp_str_this_y_e + 0;
}
if($x_d == -1 AND $y_d == 1 ) {
//  D
$direction = 'D';
$line_other_xo  = $tmp_str_this_x_e + $segment_length;
$line_other_yo  = $tmp_str_this_y_e + 0;
$line_other_xe  = $tmp_str_this_x_e + 0;
$line_other_ye  = $tmp_str_this_y_e - $segment_length;
}
if($x_d == -1 AND $y_d == -1 ) {
//  F
$direction = 'F';
$line_other_xo  = $tmp_str_this_x_e + 0;
$line_other_yo  = $tmp_str_this_y_e + $segment_length;
$line_other_xe  = $tmp_str_this_x_e + $segment_length;
$line_other_ye  = $tmp_str_this_y_e + 0;
}

//echo 'i:'.$i.', xyz: '.$xyz.' Ls OTHER; D: '.$direction.'; Xo:'.$line_other_xo.', Yo:'.$line_other_yo.' ==> Xe: '.$line_other_xe.', Ye: '.$line_other_ye."\r\n";for($xyz=0;$xyz<count($ary_tmp_x_o)-1;$xyz++) {

if($xyz == 0) {
$tmp_str_x_o = $x_o;
$tmp_str_y_o = $y_o;
} else {
$tmp_str_x_o = $ary_tmp_x_o[$xyz];
$tmp_str_y_o = $ary_tmp_y_o[$xyz];
}

$tmp_str_x_e    = $ary_tmp_x_o[$xyz + 1];
$tmp_str_y_e    = $ary_tmp_y_o[$xyz + 1];

//  We are looking for a Line Segment which is either:
//
$line_other_xo1 = $line_other_xo;
$line_other_yo1 = $line_other_yo;
$line_other_xe1 = $line_other_xe;
$line_other_ye1 = $line_other_ye;

//echo 'i:'.$i.', xyz: '.$xyz.' Ls OTHER; LINE SEGMENT; Xo:'.$line_other_xo1.', Yo:'.$line_other_yo1.' ==> Xe: '.$line_other_xe1.', Ye: '.$line_other_ye1."\r\n";
//echo 'i:'.$i.', xyz: '.$xyz.' Ls OTHER; LINE SEGMENT; Xo:'.$tmp_str_x_o.', Yo:'.$tmp_str_y_o.' ==> Xe: '.$tmp_str_x_e.', Ye: '.$tmp_str_y_e."\r\n";
// or

$line_other_xo2 = $line_other_xe;
$line_other_yo2 = $line_other_ye;
$line_other_xe2 = $line_other_xo;
$line_other_ye2 = $line_other_yo;

$tmp_cross = 0;

if($tmp_str_x_o == $line_other_xo1 AND $tmp_str_y_o == $line_other_yo1 AND $tmp_str_x_e == $line_other_xe1 AND $tmp_str_y_e == $line_other_ye1) {
// WARNING LINES Crossed
//
$tmp_cross = 1;
//echo 'crosses';
}
if($tmp_str_x_o == $line_other_xo2 AND $tmp_str_y_o == $line_other_yo2 AND $tmp_str_x_e == $line_other_xe2 AND $tmp_str_y_e == $line_other_ye2) {
// WARNING LINES Crossed
//
$tmp_cross = 1;
//echo 'crosses';
}

$tmp_cross_total    = $tmp_cross + $tmp_cross_total;

}
if($tmp_cross > 0) {

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]