Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] mapa - rysowanie ścieżek
Forum PHP.pl > Forum > PHP
darkpytong
Chciałbym stworzyć w php mapkę z zaznaczonymi na niej lokacjami, które będą połączone ścieżkami. Zastanawiam się, czy może macie pomysł na wykonanie owych ścieżek. W sumie najbardziej zależy mi na wyglądzie samych połączeń- żeby to były jakieś ładne linie poprowadzone łukami; byle nie proste albo nienaturalnie powykrzywiane. 


Chcę, aby ścieżki były automatycznie nanoszone w ramach zmian w samej mapie. Tak, aby nawet w wypadku przemieszczania się punktów ścieżka obierała trasę uwzględniając to przesunięcie. Może coś w rodzaju dynamicznie generowanego pliku graficznego? 


Chciałbym, żeby efekt końcowy prezentował się podobnie jak na mapie świata z gry Final Fantasy Tactics: http://www.ffshrine.org/fft/world_map.jpg


Mam nadzieję, że dobrze nakreśliłem Wam moją ideę. Za ewentualną pomoc z góry dziękuję i na wszelki wypadek zaznaczam raz jeszcze, że oczekuję pomysłów a nie gotowych rozwiązań w postaci kodu, wolę się sam pomęczyć  smile.gif
kyku
cos takiego mozesz uzyskac za pomoca biblioteki GD smile.gif

ew. paint tongue.gif
darkpytong
Czy naprawdę poza bibliotekami GD nie ma jakiegoś sposobu? Nie sądziłem, że może to być aż taki problem  blinksmiley.gif
pest
Może dałoby się coś wykombinować z rysunkiem wektorowym .svg nakładanym na mapę, albo w całości tworzeniu mapy w .svg - tylko w najprostszych przypadkach.

W każdym razie ja bym radził zainteresować się tematem formatu .svg i z nim kombinować.
TAMLYN
Ale z tego co wiem, to IE nie obsługuje svg smile.gif Czy już może jest inaczej?
erix
Z tego, co mi wiadomo, to przy zainstalowanej wtyczce obsługuje. Można jeszcze rysować po obiekcie <canvas />, a dla IE - VRML.

Podejrzewam, że są jakieś frameworki unifikujące.
TAMLYN
Hmm... Tylko kto Ci wtyczkę zainstaluje ze zwykłych userów smile.gif Będą obawiać się jakiegoś wirusa pewnie czy cuś winksmiley.jpg

A nie da się tego jednak na GD oprzeć? Jakoś za pomocą imagecreateline? Albo coś w ten deseń? biggrin.gif Jakby się uprzeć to chyba można by tu zastosować jakieś algorytmy z wykresów smile.gif Czy jednak nie dałoby rady?
starach
Cytat(erix @ 13.01.2009, 23:42:20 ) *
Autor klasy matematykiem jest dobrym, ale programistą nie.
darkpytong
Wielkie dzięki za podpowiedzi  smile.gif

Trochę nad tym posiedziałem próbując zrobić coś z tym skryptem:

CODE
<?php

$segmentos =30;
$x=array(0,10,80,30);
$y=array(0,10,40,50);

function bezier($p,$steps){
  $t = 1 / $steps;
  $temp = $t * $t;
  $ret = array();
  $f = $p[0];
  $fd = 3 * ($p[1] - $p[0]) * $t;
  $fdd_per_2=3*($p[0]-2*$p[1]+$p[2])*$temp;
  $fddd_per_2=3*(3*($p[1]-$p[2])+$p[3]-$p[0])*$temp*$t;
  $fddd = $fddd_per_2 + $fddd_per_2;
  $fdd = $fdd_per_2 + $fdd_per_2;
  $fddd_per_6 = $fddd_per_2 * (1.0 / 3);
  for ($loop=0; $loop<$steps; $loop++) {
  array_push($ret,$f);
  $f = $f + $fd + $fdd_per_2 + $fddd_per_6;
  $fd = $fd + $fdd + $fddd_per_2;
  $fdd = $fdd + $fddd;
  $fdd_per_2 = $fdd_per_2 + $fddd_per_2;
  }
  return $ret;
}

$by = bezier($y,$segmentos);
$bx = bezier($x,$segmentos);
header ("Content-type: image/jpeg");
$tam = 200;
$im = imagecreate($tam,$tam);
$background_color = imagecolorallocate ($im, 200, 200, 200);
$tc = imagecolorallocate ($im, 233, 14, 91);
for($i=0;$i<$segmentos-1;$i++)
  imageline($im,$bx[$i],$tam-$by[$i],$bx[$i+1],$tam-$by[$i+1],$tc);
imagejpeg($im); 
imagedestroy($im);
?>


Niestety, skrypt niezbyt poprawnie działa, linie się zawijają i ogólnie dość wariacko zachowują.

Jednakże spróbuję tej klasy, mam nadzieję, że będzie to coś innego, działającego  smile.gif

A na marginesie: przypominam przezornie, że linie mają być generowane dynamicznie, ew. losowo.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.