2D绘制图形

3D图形在数量剖析、数据建立模型、图形和图像管理等领域中都颇具广大的采纳,上面将给大家介绍一下怎样行使python举办3D图形的绘图,包含3D散点、3D表面、3D轮廓、3D直线(曲线)以及3D文字等的绘图。

3D图形在数量分析、数据建立模型、图形和图像管理等领域中都怀有遍布的运用,上面将给大家介绍一下哪些在Python中动用
matplotlib实行3D图形的绘图,包蕴3D散点、3D表面、3D概略、3D直线以及3D文字等的绘图。

矩形

第二要素:左上坐标右下坐标

    private void drawRec(Canvas canvas) { 
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.RED); 
        float left = 0; float top = 0; 
        float right = getWidth() / 3; 
        float buttom = getWidth() / 3; 
        canvas.drawRect(left, top, right, buttom, paint);
    }

2D绘制图形。       PEAR提供了Image_3D
Package来创立3D图像。图像或近视眼在3D空间中依照X、Y 、Z
坐标定位。生成的图像将表现在二D上空中,能够积累为 PNG、SVG
格式,或输出到Shell。通过Image_3D方可很方便生成一些总结的3D对象,举例立方体、锥体、球体、文本和饼图。查了弹指间PEA安德拉文档关于Image_3D的实例二个也绝非~囧~,只能本人研商一下,将经历分享给大家,请多多拍砖。言归正传,Image_3D需要PEAR和GD(配置php.ini)的支持。

预备干活:

策动干活:

圆形

首要要素:圆心坐标半径

    private void drawCicle(Canvas canvas) { 
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
        paint.setColor(Color.RED); 
        float cenetrX = getWidth() / 2; 
        float centerY = getWidth() / 3 / 2; 
        float radius = getWidth() / 3 / 2;   
        canvas.drawCircle(cenetrX, centerY, radius, paint);
    }

1. 安装Image_3D

下载Image_3D Package ,如今风靡版本为:0.四.一 阿尔法

 

法定下载:

将压缩包放到有pear.bat的目录中,举个例子:c:\php,假设WAmp5的话则为c:\wamp\php。

执行 pear install Image_3D-0.4.1.gz  安装Package:

图片 1

设置收尾,Image_3D会在 C:\wamp\php\PEAR\Image 目录中。

 

python中绘制3D图形,依旧采取常用的绘图模块matplotlib,但供给设置mpl_toolkits工具包,安装方式如下:windows命令行进入到python安装目录下的Scripts文件夹下,推行: pip
install –upgrade matplotlib就可以;linux遭逢下直接实行该命令。

python中绘制3D图形,依然使用常用的绘图模块matplotlib,但必要设置mpl_toolkits工具包,安装方式如下:windows命令行进入到python安装目录下的Scripts文件夹下,施行:
pip install –upgrade matplotlib就能够;Linux遭逢下直接执行该命令。

纺锤形可能弧形

关键要素:椭圆容器初始角度圆弧角度
只顾:这里要求传递二个 RectF 作为椭圆恐怕弧形的器皿
startAngle : 0度为最右边
useCenter : 是不是是实心的

    private void drawArc(Canvas canvas) {
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.RED);paint.setStrokeWidth(0.1f * getWzidth() / 3);
        paint.setStyle(Paint.Style.STROKE);float margin = 0.1f * getWidth() / 3;
        float left = 2 * getWidth() / 3 + margin;
        float top = 0 + margin;
        float right = getWidth() - margin;
        float buttom = getWidth() / 3 - margin;
        RectF oval = new RectF(left, top, right, buttom);
        float startAngle = 270;
        float sweepAngle = 285;
        boolean useCenter = false;
        canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint);
    }

2. 3D坐标系

Image_3D的坐标系及旋转请参照他事他说加以考察下图,用于缩放、旋转或位移物体:

图片 2

设置好这几个模块后,就能够调用mpl_tookits下的mplot3d类进行3D图形的绘图。

设置好那些模块后,就能够调用mpl_tookits下的mplot三d类进行3D图形的绘图。

文字

注意:

  1. x,y 为文字矩形的左下角坐标
  2. 1旦设置 paint.setTextAlign(Paint.Align.CENTER);x
    为文字为主的坐标,y 不变

canvas.drawText("绘制文字", x, y, paint);

3. 绘制圆锥体

代码如下:

<?php
//调用3D图形类
require_once('Image/3D.php');

//创建一个三维空间
$image = new Image_3D();
$image->setColor(new Image_3D_Color(255, 255, 255));

//在坐标系左下方创建一个红色光点
$light1 = $image->createLight("Light",array(-100, 100, -100));
$light1->setColor(new Image_3D_Color(255, 0, 0));

//在坐标系右上方创建一个绿色光点
$light2 = $image->createLight("Light",array(100, -200, -50));
$light2->setColor(new Image_3D_Color(0, 200, 0));

//创建3D圆锥体
$cone = $image->createObject('cone',array('detail'=>360));
$cone->setColor(new Image_3D_Color(255, 255, 255));
//按X,Y,Z轴缩放
$cone->transform($image->createMatrix('scale', array(80, 150, 80)));
//按X,Y,Z轴旋转
$cone->transform($image->createMatrix('rotation', array(15, 0, 20)));
//按X,Y,Z轴移动
$cone->transform($image->createMatrix('move', array(0, -50, 0)));

//创建2D输出图像
//渲染效果,Image_3D共提供了种效果:Isometric,Perspectively,Raytrace
//参考...\PEAR\Image\3D\Renderer目录
$image->createRenderer('perspectively');
//图像驱动,也可以SVG,ASCII等
//参考...\PEAR\Image\3D\Driver目录
$image->createDriver('gd');
//创建输出图片名称及大小
$image->render(400, 300, 'object.png');
//显示效果图
echo '<img src="object.png">';
?>

效果图:

图片 3

下边以实例举行说明。

上面以实例实行认证。

四. 3D文字效果

将上例创立3D圆锥体部分代码替换为:

//创建3D字体
$text = $image->createObject('text','cnblogs');
$text->setColor(new Image_3D_Color(255, 255, 255));
$text->transform($image->createMatrix('scale', array(10, 10, 20)));
$text->transform($image->createMatrix('rotation', array(20, 0, 20)));
$text->transform($image->createMatrix('move', array(-150, -100, 0)));

效果图:

图片 4

源代码下载:

一、3D表面形状的绘图

一、3D表面形状的绘图

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

# Make data 
u = np.linspace(0, 2 * np.pi, 100) 
v = np.linspace(0, np.pi, 100) 
x = 10 * np.outer(np.cos(u), np.sin(v)) 
y = 10 * np.outer(np.sin(u), np.sin(v)) 
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) 

# Plot the surface 
ax.plot_surface(x, y, z, color='b') 

plt.show()

图片 5

球表面,结果如下:

这段代码是绘制二个3D的椭球表面,结果如下:

图片 6

图片 7

2、3D直线(曲线)的绘制

二、3D直线的绘图

import matplotlib as mpl 
from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib.pyplot as plt 

mpl.rcParams['legend.fontsize'] = 10 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100) 
z = np.linspace(-2, 2, 100) 
r = z**2 + 1 
x = r * np.sin(theta) 
y = r * np.cos(theta) 
ax.plot(x, y, z, label='parametric curve') 
ax.legend() 

plt.show()

图片 8

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图