gpt4 book ai didi

algorithm - 路径跟随算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:38 26 4
gpt4 key购买 nike

假设我有一个看起来像这样的形状:

 __ __
|__|__|

有 7 条线段,每条 2 个单位长。

每条线上的开始和结束段都有一个 (x, y) 坐标。

这些行可能存储在一个数组中,如下所示:

[
[0, 0, 2, 0],
[0, 0, 0, 2],
[0, 2, 2, 2],
[2, 0, 2, 2],
[2, 0, 4, 0],
[2, 2, 4, 2],
[4, 0, 4, 2]
]

所有这些线都是相连的。如果有其他线路未连接,我如何确定这些特定线路(所有线路)是否已连接。

基本上我想不出任何能得到所有线条的东西。

如果有人能在概念上或代码方面为我指出正确的方向,我们将不胜感激。

最佳答案

朴素的 Perl 版本:

use warnings;
use strict;

my $l = [ [0, 0, 2, 0],
[0, 0, 0, 2],
[0, 2, 2, 2],
[2, 0, 2, 2],
[2, 0, 4, 0],
[2, 2, 4, 2],
[4, 0, 4, 2] ];

my @f;
Segment:
while (my $line = shift @$l) {
for my $set (@f) {
push (@$set, $line), next Segment if is_conn($line, $set);
}
push @f, [$line];
}

for my $set (@f) {
print "\n================\n";
print join(",", @$_), "\n" for @$set;
}

sub is_conn {
my ($line, $set) = (shift, shift);
for my $cand (@$set) {
return 1 if has_same_point($cand, $line);
}
return 0;
}

sub has_same_point {
my ($l1, $l2) = @_;
my @p11 = ($l1->[0], $l1->[1]);
my @p12 = ($l1->[2], $l1->[3]);
my @p21 = ($l2->[0], $l2->[1]);
my @p22 = ($l2->[2], $l2->[3]);
return is_same_point(@p11, @p21) ||
is_same_point(@p12, @p21) ||
is_same_point(@p11, @p22) ||
is_same_point(@p12, @p22);
}

sub is_same_point {
my ($x1, $y1, $x2, $y2) = (@_);
return $x1 == $x2 && $y1 == $y2;
}

关于algorithm - 路径跟随算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15374930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com