#!/usr/bin/perl -w use strict; use warnings; use Tk; use Tk::Canvas; my $mw = MainWindow->new(); $mw->state('zoomed'); my $canvas = $mw->Canvas()->pack(-expand => 1, -fill => 'both'); my %coord_1 = ( 'a' => [100,100,'b'], 'b' => [200,100,'c'], 'c' => [200,200,'d'], 'd' => [150,250,'e'], 'e' => [100,200,'a'], ); my %coord_2 = ( 'f' => [250,250,'g'], 'g' => [300,200,'h'], 'h' => [300,300,'i'], 'i' => [250,350,'j'], 'j' => [200,300,'f'], ); drawPolygon($canvas, \%coord_1, 'yellow'); my $moving_pol = drawPolygon($canvas, \%coord_2, 'lightblue'); $mw->bind('', sub{movePolygon($canvas,$moving_pol,0,-5);}); $mw->bind('', sub{movePolygon($canvas,$moving_pol,0,5);}); $mw->bind('', sub{movePolygon($canvas,$moving_pol,-5,0);}); $mw->bind('', sub{movePolygon($canvas,$moving_pol,5,0);}); Tk::MainLoop; sub drawPolygon{ my $widget = shift; my $coord = shift; my $color = shift; my @coords; foreach my $point (sort keys %{$coord}){ push(@coords, $coord->{$point}->[0], $coord->{$point}->[1]); } return $widget->createPolygon( @coords, -fill => $color, -outline => 'black', ); } sub movePolygon{ my $widget = shift; my $polygon = shift; my $x_move = shift; my $y_move = shift; foreach my $point (sort keys %coord_2){ $coord_2{$point}->[0] += $x_move; $coord_2{$point}->[1] += $y_move; } $widget->move($polygon, $x_move, $y_move); if (PolygonsOverlap(\%coord_1,\%coord_2)){ $widget->itemconfigure( $polygon, -outline => 'red', -fill => 'lightgreen', ); }else{ $widget->itemconfigure( $polygon, -outline => 'black', -fill => 'lightblue', ); } } sub PolygonsOverlap{ my %coord_1 = %{shift()}; my %coord_2 = %{shift()}; ################################# # algorithmus zum testen, ob sich # die polygone überschneiden. ################################# }