Я обещаю, что пытался найти это по всей сети, и я не могу заставить это работать. Если у меня есть исходная точка (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) {
Задача ещё не решена.
Других решений пока нет …