加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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图

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读