perl语言svg制图模板化
发布时间:2020-12-16 00:27:34 所属栏目:大数据 来源:网络整理
导读:? svg制图如果不转换坐标的话,很容易弄错坐标是怎么转换的,这儿把坐标一般化,用几何画板把各个一般化的各个点坐标给标出来,然后以后要是用的话就可以直接作图,方便多了。(这儿用的是perl语言,所以每个变量都是用perl语言的变量转换的) 分为两部分:
?
svg制图如果不转换坐标的话,很容易弄错坐标是怎么转换的,这儿把坐标一般化,用几何画板把各个一般化的各个点坐标给标出来,然后以后要是用的话就可以直接作图,方便多了。(这儿用的是perl语言,所以每个变量都是用perl语言的变量转换的) 分为两部分: 1、图片坐标的说明? ? 2、perl语言程序的实例展示 代码: use strict; use warnings; use SVG; my $infile = shift; open AA,$infile or die $!; my @theta; my @fst; my $aa; while ($aa = <AA>){ my @t = split /t/,$aa; push @theta,$t[0]; push @fst,$t[1]; } close AA; my $width = 800; my $height = 800;#这儿是画布变量,真是画布可以加大,这儿只是为了方便下面是使用 my $svg = SVG->new('width',($width+100),'height',($height+100)); my $x = $svg->group(id=>'group_x',style=>{stroke=>'black','stroke-width',1} ); my $y = $svg->group(id=>'group_y',style=>{stroke=>'blue',0.5} ); my $z = $svg->group(id=>'group_z',style=>{stroke=>'red',0.5} ); my $p = $svg->group(id=>'group_p',style=>{stroke=>'purple',0.1} ); $x->line(x1=>100,y1=>($height-100),x2=>($width-100),y2=>($height-100) );#x轴 $x->line(x1=>100,x2=>100,y2=>100);#y轴 $x->line(x1=>100,y1=>100,x2=>95,y2=>105); $x->line(x1=>100,x2=>105,y2=>105);#y轴的两个箭头 $x->line(x1=>($width-100),x2=>($width-105),y2=>($height-105) ); $x->line(x1=>($width-100),y2=>($height-95) );#x轴的两个箭头 $svg->text(x=>90,y=>$height-90,'font-size'=>10,'stroke','black','-cdata',"0");#0点 $svg->text(x=>90,y=>100,"y"); $svg->text(x=>($width-100),"x");#x和y两个小标 my $sw = ($width - 200) / 10;#轴长标度 my $sh = ($height- 200) / 10; my $k; for($k=1; $k <10; $k++){ $x->line(x1=>(100+$sw*$k),x2=>(100+$sw*$k),y2=>($height-95) );#y轴刻度 $x->line(x1=>100,y1=>($height-100-$sh*$k),y2=>($height-100-$sh*$k) );#x轴刻度 $p->line(x1=>(100+$sw*$k),y2=>100 ); $p->line(x1=>100,y2=>($height-100-$sh*$k) );#网格线 } my $value_y = 0.1; #my $value_x; for($k=1; $k<10; $k++){ #$svg->text(x=>(100+$sw*$k),y=>($height-100),'font-size'=>18,'font-weight'=>'bold',$temp ); $svg->text(x=>70,y=>($height-100-$sh*$k),$value_y*$k/10 );#刻度值 } my $Line = scalar( @theta ); my $mx = ($width - 200) / $Line; my $my = ($height - 200) / 0.1; #print STDERR "$Linen"; for (my $k=1; $k<$Line; $k++){ $y->line(x1=>(100+$mx*($k-1)),y1=>($height-100-$my*$theta[$k-1]),x2=>(100+$mx*$k),y2=>($height-100-$my*$theta[$k]),'orange','fill','orange' ); $z->line(x1=>(100+$mx*($k-1)),y1=>($height-100-$my*$fst[$k-1]),y2=>($height-100-$my*$fst[$k]),'pink','pink');#作图,注意是划线,不是标点 } #print "$linen"; print $svg->xmlify; 最后结果:svg图 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |