精华内容
下载资源
问答
  • 折线(一)绘制折线图坐标

    千次阅读 2015-11-16 22:27:31
    ,对于手机图形的绘制, 他的坐标轴原点在左上方. 绘制折线的第一步就是要先绘制出, 折线坐标轴,由于手机坐标轴原点在左上方.那么折线的原点y轴久正好相反。 原点坐标是(0, height) 分别为4个步骤...

    如图,对于手机图形的绘制, 他的坐标轴原点在左上方.

    绘制折线图的第一步就是要先绘制出, 折线图的坐标轴,由于手机坐标轴原点在左上方.那么折线图的原点y轴久正好相反。 原点坐标是(0, height)

    分别为4个步骤,绘制x轴, y轴, x轴箭头, y轴箭头

    为了看清楚这折线图, 我们把它设置view边缘100px内的位置.

     

    我的自定义包命为:

    sam.android.utils.widget
     
     
    public class LineChartView extends View
    
    {
        public LineChartView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            //绘制坐标轴
            drawAxis(canvas);
        }
    
        /**
         *绘制坐标轴, 并且设置100padding给LineChartView
         * @param canvas
         */
        private void drawAxis(Canvas canvas) {
            int chartViewHeight = getMeasuredHeight(); //获取LineChartView高度
            int charViewWidth = getMeasuredWidth(); //获取LineChartView宽度
            Paint paint = new Paint(); //画笔
            paint.setColor(Color.BLACK);//设置画笔为黑色
            paint.setStrokeWidth(5);//设置画笔尖大小为5px
    
            /*
             *   绘制直线.在2点之间连线
             *   startX 起点的x坐标
             *   startY 起点的y坐标
             *   endX 终点的x坐标
             *   endY 终点的y坐标
             *   canvas.drawLine(startX, startY, endX, endY)
             */
    
            //绘制直线, paddingTop 了100px的y轴,
            canvas.drawLine(100,  chartViewHeight - 100, 100, 100, paint);
    
            //绘制y轴左边半边箭头 长度为 开平方(20^2+20^2), 别为为什么。。。勾股定理。。。
            canvas.drawLine(100, 100, 100 - 20, 120, paint);
    
            //绘制y轴右边半边箭头 长度为 开平方(20^2+20^2)
            canvas.drawLine(100, 100, 100 + 20, 120, paint);
    
            //绘制直线, 在(100, chartViewHeight - 100) 与 ( 100, 100)连线, 也就是paddingLeft 了100px的x轴,
            canvas.drawLine(100, chartViewHeight - 100, charViewWidth - 100, chartViewHeight- 100, paint);
    
            //绘制x轴上半部分箭头 ,长度为 开平方(20^2+20^2)
            canvas.drawLine(charViewWidth - 100,chartViewHeight - 100, charViewWidth - 100 - 20,chartViewHeight - 100 - 20, paint);
    
            //绘制x轴下半部分箭头, 长度为  开平方(20^2+20^2)
            canvas.drawLine(charViewWidth - 100, chartViewHeight - 100, charViewWidth - 100 - 20,chartViewHeight - 100 + 20, paint);
        }
    
    
    }

     

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <sam.android.utils.widget.LineChartView
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    
    </LinearLayout>

     

     

     

     

    待更新2...

     

     

     

     

     

     

    展开全文
  • 在使用CAD手机软件查看CAD图纸的过程中,需要绘制直线或者多线段的时候,一般情况下是选择已有图形夹点进行绘制,但如果已知具体的每个坐标点,那么该如何通过坐标点连接起对应的线段?接下来给大家简单介绍一下...

    在使用CAD手机看图软件查看CAD图纸的过程中,需要绘制直线或者多线段的时候,一般情况下是选择已有图形夹点进行绘制,但如果已知具体的每个坐标点,那么该如何通过坐标点连接起对应的线段?接下来给大家简单介绍一下在CAD手机看图软件浩辰CAD看图王中根据已知坐标点绘制线段的操作教程吧!
    为了方便用户使用浩辰CAD看图王手机版中提供了直接输入坐标点来绘制线段的功能。具体的操作步骤如下:
    首先打开浩辰CAD看图王手机版,然后点击单线段或者多线段功能,在屏幕上任意点击一点,然后点击x,y按钮,即可弹出输入x、y坐标界面,在这个界面可以根据需求输入实际的x、y坐标值。如下图所示:
    在这里插入图片描述

    输入完成后,点击右下角对勾按钮确认,然后在屏幕其他地方点击一下,此时再次点击x,y按钮,输入该点的坐标值。重复上面的操作,逐个输入每个坐标点,就可以按照坐标点连接成线段。如下图所示:
    在这里插入图片描述

    以上就是在CAD手机看图软件浩辰CAD看图王手机版中根据已知坐标点绘制线段的详细操作步骤,大家在以后的使用过程中遇到此类问题可以参考本篇CAD教程来解决哦~

    展开全文
  • mfc程序,主线程里创建两个线程接收手机的数据...但是所绘制的图形的坐标与实际显示的不一样,我把坐标的结果于static text中显示出来。![图片说明](https://img-ask.csdn.net/upload/201704/21/1492768646_35553.png)
  • 我们有的时候需要在K线右侧绘制一个面积,并和K线共享一个Y轴坐标。 效果 demo页面 demo 手机横屏demo 步骤 1. 配置一个深度 在option里面的扩展属性里面配置一个深度, 并且让K线右边预留150的宽度...

    HQChart使用教程58 - 如何在K线右侧绘制面积图

    需求

    我们有的时候需要在K线图右侧绘制一个面积图,并和K线图共享一个Y轴坐标。

    效果图

    在这里插入图片描述

    demo页面

    demo
    手机横屏demo

    步骤

    1. 配置一个深度图

    在option里面的扩展属性里面配置一个深度图, 并且让K线图右边预留150的宽度用来绘制面积图

    this.Option= {
      Type:'历史K线图',   //创建图形类型
      
      Windows: //窗口指标
      [
          {Index:"MA", Modify:true,Change:false},
          {Index:"VOL", Modify:true,Change:false},
         
      ], 
      
    Border: //边框
     {
          Left:5,         //左边间距
          Right:150,       //右边间距 右边留150宽度绘制深度图
          Bottom:25,      //底部间距
          Top:25          //顶部间距
      },
      ......
     ExtendChart:    //扩展图形
     [
          //{Name:'KLineTooltip' }  //手机端tooltip
          { Name:"深度图", FrameID:0,  ID:0 },    //深度图
      ]
    }
    

    参数说明:
    Name: 固定: 深度图
    FrameID: 对应绘制指标窗口的索引上, 这里我们把面积图绘制在第1个指标窗口右边
    ID: key, 唯一的标识, 用来设置设置数据的时候用的。(可以缺省)
    Width: 面积图宽度(可以缺省,默认200)

    2. 设置数据

    设置数据接口
    SetDepthMapData( data, isDraw)
    data: 面积图配置信息及数据, data 支持设置多个面积图
    isDraw: 是否立即重绘

    3. 数据格式

    数据格式:
    [
    {
    Data:[ {X:对应K线Y轴的数值, Y:横向数值 }, ],
    Type: 0 固定值
    LineColor: 线段颜色
    AreaColor: 面积颜色 支持渐近色
    TextColor: 十字光标输出文字颜色
    TextBGColor: 十字光标输出文字背景色
    IsShowCorssCursor:true/false; //是否显示十字光标的提示信息
    },
    ]

    this.RecvDepthMapData=function()
        {
            //使用默认的颜色配置
            var buyData=
            { 
               Data:[], 
               Type:0 
            };
    
            var sellData=
            { 
                Data:[], 
                Type:0 ,
                LineColor:'rgba(255,165,0,0.6)',
                AreaColor:['rgba(255,165,0,0.5)','rgba(255,165,0,0.4)','rgba(255,165,0,0.3)','rgba(255,165,0,0.2)'],
                TextColor:'rgb(248,248,255)',
                TextBGColor:"rgb(255,165,0)"
            };
    
            //5-12 每个价位的买量
            for(var i=5, j=0;i<=12;i+=0.01, ++j)
            {
                var item={X:i, Y:parseInt((Math.random()+1)*100)*10000 };
                if (j%10) item.YText=`买:${item.Y}`;
                buyData.Data.push(item);
            }
            
            //12-15 每个价位的卖量
            for(var i=12, j=0;i<15;i+=0.01,++j)
            {
                var item={X:i, Y:parseInt((Math.random()+1)*100)*10000 };
                if (j%10) item.YText=`卖:${item.Y}`;
                sellData.Data.push(item);
            }
    
            var data=[buyData,sellData]; //设置2个面积图
            
            this.Chart.SetDepthMapData([{ID:0, Data:data}], true); //ID:对应前面配置深度图的时候设置的ID
        }
    

    完整实例代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">  
    <head>  
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    
    <title>K线图+深度图</title>  
        <!-- 加载资源 -->
        <link rel="stylesheet" href="../jscommon/umychart.resource/css/tools.css" />
        <link rel="stylesheet" href="../jscommon/umychart.resource/font/iconfont.css" />
    </head>  
    <body>
        <div id="kline" style="width: 900px;height:400px;position: relative;"></div>
    
        <script src="content/js/jquery.min.js"></script>
        <script src="content/js/webfont.js"></script>
        <script src='../jscommon/umychart.console.js'></script>     <!-- 日志输出 -->
        <script src="../jscommon/umychart.network.js"></script>     <!-- 网络请求分装 -->
        <script src="../jscommon/umychart.js"></script>             <!-- K线图形 -->
        <script src="../jscommon/umychart.complier.js"></script>    <!-- 麦语言解析执行器 -->
        <script src="../jscommon/umychart.index.data.js"></script>  <!-- 基础指标库 -->
        <script src="../jscommon/umychart.style.js"></script>       <!-- 白色风格和黑色风格配置信息 -->
        
        <script>
    
            //JSConsole.Chart.Log=() =>{}
            //JSConsole.Complier.Log=()=>{}
    
            /*
            MARKET_SUFFIX_NAME.GetMarketStatus = function (symbol) 
            {
                return 2;
            }
            */
            
            //简单的把K线控件封装下
            function KLineChart(divKLine)
            {
                this.DivKLine=divKLine;
                this.Chart=JSChart.Init(divKLine);   //把K线图绑定到一个Div上
    
                //K线配置信息
                this.Option= {
                    Type:'历史K线图',   //创建图形类型
                    
                    Windows: //窗口指标
                    [
                        //{Index:"EMPTY"},
                        {Index:"MA", Modify:true,Change:false},
                        {Index:"VOL", Modify:true,Change:false},
                        //{Index:"MACD", Modify:true,Change:false},
                        //{Index:"RSI", Modify:false,Change:false}, 
                    ], 
    
                    
                    OverlayIndex:
                    [
                        //{Index:'VOL', Windows:0 },
                        //{Index:'MACD', Windows:0 },
                        //{Index:'MA', Windows:1 }
                    ],  //叠加指标
    
                    OverlayIndexFrameWidth:50,
                    
                    
                    Symbol:'600000.sh',
                    IsAutoUpdate:true,       //是自动更新数据
                    AutoUpdateFrequency:3000,   //数据更新频率
                    //TradeIndex: {Index:'交易系统-BIAS'},    //交易系统
        
                    IsShowRightMenu:true,          //右键菜单
                    IsShowCorssCursorInfo:true,    //是否显示十字光标的刻度信息
                    //CorssCursorTouchEnd:true,
        
                    KLine:  //K线设置
                    {
                        DragMode:1,                 //拖拽模式 0 禁止拖拽 1 数据拖拽 2 区间选择
                        Right:1,                    //复权 0 不复权 1 前复权 2 后复权
                        Period:0,                   //周期 0 日线 1 周线 2 月线 3 年线 
                        MaxReqeustDataCount:1000,   //数据个数
                        MaxRequestMinuteDayCount:10, //分钟数据取5天
                        PageSize:50,               //一屏显示多少数据
                        //Info:["互动易","大宗交易",'龙虎榜',"调研","业绩预告","公告"],       //信息地雷
                        IsShowTooltip:true,                 //是否显示K线提示信息
                        DrawType:0,      //K线类型 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图
                        //FirstShowDate:20161201,
                        KLineDoubleClick:false, //禁止双击弹框
                    },
        
                    KLineTitle: //标题设置
                    {
                        IsShowName:true,       //不显示股票名称
                        IsShowSettingInfo:true //不显示周期/复权
                    },
        
                    Border: //边框
                    {
                        Left:5,         //左边间距
                        Right:150,       //右边间距
                        Bottom:25,      //底部间距
                        Top:25          //顶部间距
                    },
                    
                    Frame:  //子框架设置
                    [
                        {SplitCount:3,StringFormat:0, IsShowLeftText:false, RightTextPosition:0 },
                        {SplitCount:2,StringFormat:0, IsShowLeftText:false},
                        {SplitCount:2,StringFormat:0, IsShowLeftText:false}
                    ],
    
                    ExtendChart:    //扩展图形
                    [
                        //{Name:'KLineTooltip' }  //手机端tooltip
                        { Name:"深度图", FrameID:0,  ID:0 },    //深度图
                    ]
                };
                     
                this.Create=function()  //创建图形
                {
                    var self=this;
                    $(window).resize(function() { self.OnSize(); });    //绑定窗口大小变化事件
    
                    var blackStyle=HQChartStyle.GetStyleConfig(STYLE_TYPE_ID.BLACK_ID); //读取黑色风格配置
                    JSChart.SetStyle(blackStyle);
                    this.DivKLine.style.backgroundColor=blackStyle.BGColor; //设置最外面的div背景
    
                    this.OnSize();  //让K线全屏
                    this.Chart.SetOption(this.Option);  //设置K线配置
    
                    setTimeout(() => { this.RecvDepthMapData() }, 5000);
                }
    
                this.OnSize=function()  //自适应大小调整
                {
                    var height= $(window).height();
                    var width = $(window).width();
                    this.DivKLine.style.top='px';
                    this.DivKLine.style.left='px';
                    this.DivKLine.style.width=width+'px';
                    this.DivKLine.style.height=height+'px';
                    this.Chart.OnSize();
                }
    
                this.RecvDepthMapData=function()
                {
                    //使用默认的颜色配置
                    var buyData=
                    { 
                       Data:[], 
                       Type:0 
                    };
    
                    var sellData=
                    { 
                        Data:[], 
                        Type:0 ,
                        LineColor:'rgba(255,165,0,0.6)',
                        AreaColor:['rgba(255,165,0,0.5)','rgba(255,165,0,0.4)','rgba(255,165,0,0.3)','rgba(255,165,0,0.2)'],
                        TextColor:'rgb(248,248,255)',
                        TextBGColor:"rgb(255,165,0)"
                    };
    
                    for(var i=5, j=0;i<=12;i+=0.01, ++j)
                    {
                        var item={X:i, Y:parseInt((Math.random()+1)*100)*10000 };
                        if (j%10) item.YText=`买:${item.Y}`;
                        buyData.Data.push(item);
                    }
    
                    for(var i=12, j=0;i<15;i+=0.01,++j)
                    {
                        var item={X:i, Y:parseInt((Math.random()+1)*100)*10000 };
                        if (j%10) item.YText=`卖:${item.Y}`;
                        sellData.Data.push(item);
                    }
    
                    var data=[buyData,sellData];
    
    
                    this.Chart.SetDepthMapData([{ID:0, Data:data}], true);
           
                }
            }
    
            $(function () 
            {
                WebFont.load({ custom: { families: ['iconfont'] } });   //预加载下iconfont资源
    
                var klineControl=new KLineChart(document.getElementById('kline'));
                klineControl.Create();
            })
    
        </script>  
    </body>  
    </html>
    
    
    
    <style>
    
    /*
    .klineframe-toolbar
    {
        color:rgb(238,233,233);
    }
    
    .klineframe-toolbar span:hover
    {
        color: #0182d4;
    }
    */
        
    </style>
    

    如果还有问题可以加交流QQ群: 950092318

    HQChart代码地址
    地址:github.com/jones2000/HQChart

    展开全文
  • OpenGL ES (2): 绘制平面图形

    千次阅读 2018-10-14 10:02:07
    3D坐标系统是(左上角-1,1,0 右下角1,-1,0),可以根据手机屏幕宽高调整坐标,防止图形旋转时的拉伸。 然后根据安卓手机坐标系统确定每个顶点的坐标。 所有的坐标都是(x,y,z)形式并且存于一个float[] 。 由于...

    1.平面图形的绘制


    思路:

    1. 首先自己想象一个形状
    2. 3D坐标系统是(左上角-1,1,0  右下角1,-1,0),可以根据手机屏幕宽高调整坐标,防止图形旋转时的拉伸。
    3. 然后根据安卓手机的坐标系统确定每个顶点的坐标。
    4. 所有的坐标都是(x,y,z)形式并且存于一个float[] 。
    5. 由于OpenGLES是用单个三角形组成矩形等其它图形。且每3个点以逆时针方向形成的是一个正面。
    6. 所以需要一个byte[] 来存储这些顶点,并且按照顺序排列。这样就知道有哪些点参与了绘制,并知道这些点是按照何种顺序进行绘制三角形的,然后三角形组成其它图形。
    7. 有了顶点数组float[] 和 面数组byte[] ,但是不能直接使用,需要转化才能在代码中使用
    8. float[] 转化为 FloatBuffer
    9. byte[] 转化为 ByteBuffer
    10. 暂时到这里就结束了,可以直接在代码中使用并绘制图形了。之后还会多一个纹理绘制,之后再讲。

     

    2.API介绍


    一般实现Renderer接口,重写三个方法,onSurfaceCreated()   onSurfaceChanged()   onDrawFrame()

    onSurfaceCreated()中一般做一些初始化设置

    @Override
        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            //关闭抗抖动
            gl.glDisable(GL10.GL_DITHER);
            //修正系统透视
            gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT , GL10.GL_FASTEST);
            //设置阴影平滑模式
            gl.glShadeModel(GL10.GL_SMOOTH);
            //启用深度测试 记录Z轴深度
            gl.glEnable(GL10.GL_DEPTH_TEST);
            //设置深度测试的类型
            gl.glDepthFunc(GL10.GL_LEQUAL);
        }

    onSurfaceChanged() 常用来初始化3D场景

    @Override
        public void onSurfaceChanged(GL10 gl, int width, int height) {
            //设置3D窗口的大小及位置
            gl.glViewport(0 , 0 , width , height );
            //将矩阵模式设置为投影矩阵
            gl.glMatrixMode(GL10.GL_PROJECTION);
            //初始化单位矩阵
            gl.glLoadIdentity();
            //计算透视窗宽高比
            float ratio = (float)width/height;
            //设置透视视窗的空间大小 默认为 -1,1,-1,1,-1,1
            //gl.glFrustumf(-ratio , ratio , -1 , 1  ,1 , 10);
        }

    onDrawFrame() 进行绘制

     @Override
        public void onDrawFrame(GL10 gl) {
            //清除屏幕缓存和深度缓存
            gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
            //启用顶点坐标数据
            gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
            //设置当前矩形堆栈为模型堆栈
            gl.glMatrixMode(GL10.GL_MODELVIEW);
    
            //重置当前的模型视图矩阵
            gl.glLoadIdentity();
           //如果需要用颜色填充平面,还需要禁用顶点颜色数据
            gl.glColor4f(0.2f , 1.0f , 0.2f , 0.0f);
            gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
            //绕y轴旋转
            gl.glRotatef(roate , 0f , 1f , 0f);
            //设置顶点位置数据vertextBuffer
            gl.glVertexPointer(3 , GL10.GL_FLOAT , 0 , vertextBuffer);
    //绘制面数据faceBuffer
            gl.glDrawElements(GL10.GL_TRIANGLES, faceBuffer.remaining() , GL10.GL_UNSIGNED_BYTE , faceBuffer);
    
    
            //停止绘制
            gl.glFinish();
            //停用坐标数据
            gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    
            roate+=1;
            if (roate == 360){
                roate = 0;
            }
        }

    接下来是一个矩形的绘制:

    我们先用0,1,2三个顶点绘制第一个三角形,然后用3,4,5三个顶点绘制第二个三角形。都是逆时针顺序,显示的就是正面。然后两个三角形组成矩形。

    有些点在空间上是重复的,在设置顶点数组的时候,可以只设置四个点,然后在面数组中你重复利用4个点就行了,但是为了之后的纹理绘制不出错,因为重复利用顶点经过试验导致发生了错误,所以2个三角形,6个点,每个点都有值,不重复利用顶点,而不是简单的给4个点。

    这样你的顶点数组内容应该是:

    float[]={

    x0 , y0 , z0 , 

    x1 , y1 , z1 ,

    x2 , y2 , z2 ,

    x3 , y3 , z3 ,

    x4 , y4 , z4 ,

    x5 , y5 , z5

    };

    面数组的内容应该是:byte[] = {0,1,2,3,4,5}

     

    3.代码:


    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            GLSurfaceView view = new GLSurfaceView(this);
            view.setRenderer(new OtherShader(this));
    
            setContentView(view);
    
        }
    }
    public class OtherShader implements GLSurfaceView.Renderer{
        FloatBuffer vertextBuffer;
        ByteBuffer faceBuffer;
        private float roate;
        Context context;
    
        public OtherShader(Context context) {
            this.context = context;
    //转化
            vertextBuffer = floatArray2Buffer(vertex);
            faceBuffer = ByteBuffer.wrap(face);
        }
    //顶点
        float[] vertex = new float[]{
                -0.5f , 0.5f , 0f ,
                -0.5f , -0.5f , 0f ,
                0.5f , -0.5f , 0f ,
                -0.5f , 0.5f , 0f ,
                0.5f , -0.5f , 0f ,
                0.5f , 0.5f , 0f
        };
    //面
    //两个三角形组成一个矩形
        byte[] face = new byte[]{
                0,1,2, //第0,1,2个顶点组成一个三角形
                3,4,5
        };
    
        //将顶点颜色数组转换为IntBuffer,是OpenGl ES所需要的。也可以不设置顶点颜色数组int[]
        private IntBuffer intArray2Buffer(int[] rect1color) {
            IntBuffer intBuffer;
            //不用该方法得到IntBuffer,因为Android平台限制,Buffer必须为native Buffer,所以要通过allocateDirect()创建
            //并且该Buffer必须是排序的,所以要order()方法进行排序
            //intBuffer = IntBuffer.wrap(rect1color);
            //因为一个int=4字节
            ByteBuffer bb = ByteBuffer.allocateDirect(rect1color.length * 4);
            bb.order(ByteOrder.nativeOrder());
            intBuffer = bb.asIntBuffer();
            intBuffer.put(rect1color);
            intBuffer.position(0); //移到第一个点的数据
            return intBuffer;
        }
    
        //将顶点位置数组转换为FloatBuffer,是OpenGl ES所需要的
        private FloatBuffer floatArray2Buffer(float[] rect1) {
            FloatBuffer floatBuffer;
            //不用该方法得到FloatBuffer,因为Android平台限制,Buffer必须为native Buffer,所以要通过allocateDirect()创建
            //并且该Buffer必须是排序的,所以要order()方法进行排序
            //floatBuffer = FloatBuffer.wrap(rect1);
            //因为一个int=4字节
            ByteBuffer bb = ByteBuffer.allocateDirect(rect1.length * 4);
            bb.order(ByteOrder.nativeOrder());
            floatBuffer = bb.asFloatBuffer();
            floatBuffer.put(rect1);
            floatBuffer.position(0); //移到第一个点的数据
            return floatBuffer;
        }
    
        @Override
        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            //关闭抗抖动
            gl.glDisable(GL10.GL_DITHER);
            //修正系统透视
            gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT , GL10.GL_FASTEST);
            //设置阴影平滑模式
            gl.glShadeModel(GL10.GL_SMOOTH);
            //启用深度测试 记录Z轴深度
            gl.glEnable(GL10.GL_DEPTH_TEST);
            //设置深度测试的类型
            gl.glDepthFunc(GL10.GL_LEQUAL);
    
         
        }
    
        @Override
        public void onSurfaceChanged(GL10 gl, int width, int height) {
            //设置3D窗口的大小及位置
            gl.glViewport(0 , 0 , width , height );
            //将矩阵模式设置为投影矩阵
            gl.glMatrixMode(GL10.GL_PROJECTION);
            //初始化单位矩阵
            gl.glLoadIdentity();
            //计算透视窗宽高比
            float ratio = (float)width/height;
            //设置透视视窗的空间大小 默认为 -1,1,-1,1,-1,1
            //gl.glFrustumf(-ratio , ratio , -1 , 1  ,1 , 10); //防止图形旋转拉伸,可在这里调整
        }
    
        @Override
        public void onDrawFrame(GL10 gl) {
            //清除屏幕缓存和深度缓存
            gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
            //启用顶点坐标数据
            gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
            //设置当前矩形堆栈为模型堆栈
            gl.glMatrixMode(GL10.GL_MODELVIEW);
    
            
            //重置当前的模型视图矩阵
            gl.glLoadIdentity();
           //如果需要用颜色填充平面,还需要禁用顶点颜色数据
            gl.glColor4f(0.2f , 1.0f , 0.2f , 0.0f);
            gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
            //绕y轴旋转
            gl.glRotatef(roate , 0f , 1f , 0f);
            //设置顶点位置数据
            gl.glVertexPointer(3 , GL10.GL_FLOAT , 0 , vertextBuffer);
    //绘制面
            gl.glDrawElements(GL10.GL_TRIANGLES, faceBuffer.remaining() , GL10.GL_UNSIGNED_BYTE , faceBuffer);
    
    
            //停止绘制
            gl.glFinish();
            //停用坐标数据
            gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    
            roate+=1;
            if (roate == 360){
                roate = 0;
            }
        }
    
    
    }

     

    之后会讲给这个平面进行纹理贴图.。

     

    展开全文
  • 3、通过绘图工具让数据图形化,十分便于数据直观快速的验证和获取不易直接算出的工程量,如钻孔桩坐标绘制到路线上,可以很轻松的检核其几何关系是否正确,再比如绘制互通平面可以很容易看出存在问题的路宽数据,...
  • 从android手机读取jpg格式的指定文件,调用画笔等并将指定的字符串绘制到图片指定坐标位置,并将合成后的图片保存到手机SD卡指定目录。
  • 随着信息社会的到来,智能手机的快速... 上海懒信息科技有限公司的三维地图制作平台定义了包含网格结构的室内地理坐标系,融合集成了CAD、arcgis、3dmax三维模型等各种地图数据格式,生成的室内电子地图,可以开发室
  • 【目的】使用高德地图通过手机记录下的GPS坐标绘制轨迹,这应该是一个很大的需求吧。 【高德apiDemo地址】https://lbs.amap.com/dev/demo/path-smooth#Android 【啰嗦一下】这是我今天从花都区狮岭的客户处回到...
  • ·如,当某个物体活动范围仅限于圆o的区域范围内,可以拖动它移动,即在圆的区域内物体的坐标跟着a移动,而当拖动点a离开圆的区域后,物体只能移动到圆的边界上,并且保持着a与o的直线上,于是便有了以下一道数学...
  • 是游戏引擎的开发,但是工程师会把大部分时间浪费在对坐标上,如果写引擎的时候没有把自适应考虑周全后期会非常痛苦,现在手机屏幕分辨率是各式各样 内存大小也是各式各样 所以可见自适应屏幕算法有多么的重要。...
  • android坐标系解析

    2015-03-17 16:39:39
    假设创建一个200米的物理世界,然后观察其物理世界与手机屏幕之间的坐标系关系,如7-4所示 从7-4中可以很清晰的看出,手机屏幕的左上角(0,0)坐标,正是物理世界的中心点坐标手机屏幕绘制图形时,一般默认...
  • 自定义控件的绘制离不开Android坐标系。本篇详细记录Android坐标系。... 如上所示,方框代表的是手机屏幕,水平向右为X轴,垂直向下为Y轴,Y轴的坐标越向下越大,坐标系原点是屏幕左上角。 手机屏幕...
  • 1、前言 手机屏幕坐标系与数学坐标系的不同,主要留意y轴...如手机屏幕区域,即上绿色边框围裹部分,可分为状态栏(即wifi信号、电量显示区)、标题栏、View可绘制区域。其中,标题栏和可绘制区域为我们的...
  • 自定义控件要想彻底的把握,掌握Android各种坐标系及一些API的坐标含义毫无疑问是不可忽视的技能,对于控件的摆放位置、触摸点、控件绘制等都离不开坐标系,所以学习自定义控件之前我们就先来谈一下Android坐标系。...
  • 手机直播系统开发中关于iOS获取图形...进入页面后我们重新绘制页面、绘制文字的坐标x、y,加载到服务端返回的数据字符串,然后设置杂线的高、设置线的颜色、起点、终点、加载到页面之中,这是手机直播系统开发的...
  • cocos2d-x坐标

    2015-07-02 18:37:00
    因为有好几个坐标系着一定的差异,他们需要明白,能力更精确的绘制各种图形画面上。 1.屏幕坐标系  只windows通过绘制图形上基本都知道。相应的坐标系统:原点在左上角。向右是x轴正方向,向下时y轴正方向。cocos...
  • 特别提到坐标,是因为opengl中的坐标手机屏幕的坐标是不一致的,在使用opengl坐标时需要自己进行转换一下: 这里使用OpenGL来绘制一个三角形: 项目地址:https://github.com/tong123/OpenGLTri...
  • 在之前的文章中,绘制了一些图形,但是有个问题, 以三角形为例,根据设置的坐标,应该显示正三角形,而手机上运行确被拉长为等边三角形(底边比左右两边短)。 如果手机横向防止,三角形就被压扁了。 了解两个...
  • Opengl ES 三角形的绘制 ...在绘图前首先要知道Opengl es在android手机系统中的坐标系: 以手机屏幕的中心为原点,x,y的方向如上所示;z的方向为垂直屏幕的空间,以屏幕向外为正方向。默认为按逆时针方向绘制
  • 下面正式进入主题,如何判断一个坐标点是否在一个多边形中,...用户的坐标可以通过手机设备获取到,派送范围就是通过在地图上,进行多边形的绘制,获取多个坐标点连接起来的配送防伪。下面来看看代码上是如何简单...
  • canvas的文字自动换行函数封装 // str:要绘制的字符串 // canvas:canvas对象 ...// initX:绘制字符串起始x坐标 // initY:绘制字符串起始y坐标 // lineHeight:字行高,自己定义个值即可 functi...
  • skia是个2D向量图形处理函数库,包含字型、坐标转换,以及点阵都有高效能且简洁的表现。不仅用于Google Chrome浏览器,新兴的Android开放手机平台也采用skia作为绘图处理,搭配OpenGL/ES与特定的硬件特征,强化...
  • 绘制圆弧思考定位

    2012-12-02 22:46:39
    如下所示,我想在屏幕的在150*150的小矩形中间画一个画弧。开始的时候我会去考虑 150*150的居中显示的圆心怎么拿到啊?是不是要根据手机尺寸来计算?半径也要自己去指 定。按这个计算来说,圆心坐标为(160,240)...
  • android---自定义折线

    2016-04-27 19:57:51
    自定义折线是通过继承view类,使用canvas和paint绘制出来,再加上给定的图片作为背景,不需要绘制坐标轴,不过需要通过一定的表 达式去计算图片在不同手机分辨率下的伸缩比例。   LineView.java 自定义控件类 ...
  • canvas实现折线插件

    千次阅读 2018-06-06 17:41:41
    思路就是得到数据值,时间值,先画出x,y坐标轴,然后均分x轴,将时间点绘制上去,然后根据数据值,再求出x,y坐标点,使用lineTo绘制出连续折线。注释在代码中。 /** * @desc 绘制折线 * @param {Object} ...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 186
精华内容 74
关键字:

手机绘制坐标图