[Geiv]第一章:静态绘制(二) 图元的位置变换

2023-12-13 11:38

本文主要是介绍[Geiv]第一章:静态绘制(二) 图元的位置变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

静态绘制(二) 

图元的位置变换

        这篇文章主要介绍图元位置变换方法。

[位置变换]:

        再次提醒:默认分辨率为800X600,这里使用的图形单位以分辨率为准,而非OpenGl上下文式的坐标,这点请注意。

        我们继续使用上节中的例子:

public static void main(String[] args) {UESI UES = new R();Obj rect = UES.creatObj(UESI.BGIndex);rect.addGLRect("FFFFFF",0,0,300f,300f);rect.addGLLine("00FF00",0,0,300f,300f);rect.addGLOval("FFFF00",0,0,300f,300f);rect.show();rect.setDx(100);rect.setDy(100);}

        

        其实我们已经使用了位置变换方法中的setDx与setDy了,它们会将图元位置设置在指定的坐标位置,我们绘制图形时都是以原点为起点绘制的,之后使用set方法将其偏离原点100个像素,因为以原点绘制图形较为容易。

        抛弃坐标: 但没人愿意校准坐标的,相信我;假如此时我们希望将这个图元放到屏幕中心,该如何呢?计算坐标么?我在很多游戏UI设计时花费了大量的时间校准坐标,这相当不值得,因此才有了校准API:

使用rect.setPosition(CANExPos.POS_CENTER);方法替换掉两个set方法。

Obj rect = UES.creatObj(UESI.BGIndex);
rect.addGLRect("FFFFFF",0,0,300f,300f);
rect.addGLLine("00FF00",0,0,300f,300f);
rect.addGLOval("FFFF00",0,0,300f,300f);
rect.show();
rect.setPosition(CANExPos.POS_CENTER);
        

校准API详解:

        

        其中,FLAG参数是CANExPos或CANRefPos接口中的静态量。CAN开头的接口是图形标准,Obj已经将他们全部实现。

        在上述setPosition方法中分为两类,一种是绝对定位类,它定位相对于屏幕的位置,Flag使用CANExPos中的值。

另一种是相对坐标类(其参数包含了rO),它用于相对其他图元进行定位。Flag使用CANRefPos中的值。

=====================================================

绝对定位FLAG

        

        POS_CENTER:图元中心校准在屏幕中心,也就是上例所用。

        POS_CORNER系列对应于屏幕四个角

        POS_X、Y系列对应于X、Y轴位置。

        当然,我们可以使用包含margin参数的重载进行缩进,例如,我们希望把图形放置在屏幕右上角,并进行缩进100个单位:

        只需要将:rect.setPosition(CANExPos.POS_CENTER);

        替换为:rect.setPosition(CANExPos.POS_CORNER_RIGHTTOP,100f);

结果:

        

        缩进指的是横纵向缩进,而非斜向;

        setPosition除了提供margin重载外,还提供了图形索引重载,可以对图元中的指定图形进行校准。

        Margin参数是float型,如果大意写成了Int型,则会进行视图索引重载方法,而产生潜在的越界异常。


相对定位Flag


        这些常量的名字比较容易理解:

        CORNER系列为角相对位置,LEFTTHAN\RIGHTTHAN\BOTTOMTHAN\TOPTHAN分别对应在rO左、右、下、上的位置,当然你也可以使用margin进行相对缩进。

        相对定位需要一个相对的标准(rO),它可以是一个图元Obj。

例子:

Obj rect =UES.creatObj(UESI.BGIndex);
rect.addGLRect("FFFFFF",0,0,300f,300f);
rect.addGLLine("00FF00",0,0,300f,300f);
rect.addGLOval("FFFF00",0,0,300f,300f);
rect.show();
rect.setPosition(CANExPos.POS_CENTER);
//以上是中心位置的例子,在下面进行拓展。
Obj rect2 = UES.creatObj(UESI.BGIndex);
rect2.addGLRect("004FFF",0,0,300f,100f);
rect2.setPosition(CANRefPos.RPO_Y_BOTTOMTHAN, rect);
rect2.show();

结果:

        

        我们创建了300X100的蓝色矩形rect2,并将其放置在rect1的下方。


获得图元坐标:

        使用setDx()\setDy()可以设置图元坐标。

        同理,使用getDx()\getDy()可以获得图元当前坐标。

        当然,它们包含有图元索引重载,你可以获得图元中某一图形的位置坐标。


除了位置坐标

        一个图元图形如果包括了两个以上的点,例如矩形,除了标示位置的坐标DxDy外,还有其四个点坐标(注意位置坐标并不是第一个顶点的坐标,它们仅是在未进行旋转变换前恰巧重合着);对于多点图形的顶点坐标,可使用getDxs\getDys方法获得,你可以使用getPointNumber方法获得图形的顶点数。

[例子]

        在相对定位例子中末尾,加入如下语句:

for(int i = 0;i < 4;i++){     
System.out.println(rect2.getDxs(i) +"," + rect2.getDys(i));}


控制台打印结果:

250.0,450.0

550.0,450.0

550.0,550.0

250.0,550.0

        同样,你可以使用setDxs\setDys方法设置这些坐标,它们同样具备图元索引重载。

[总结]

        通过这一节内容,我们知道了改变图元位置的各种方法,包括使用setDx、setDy这样的直接设置法,也包括校准API中的绝对校准与相对校准。最后,我们介绍了获得图元坐标或图元内图形坐标的方法,以及除去位置坐标,图形顶点的坐标的设置及获得方法。

这篇关于[Geiv]第一章:静态绘制(二) 图元的位置变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/488325

相关文章

使用Python在PDF中绘制多种图形的操作示例

《使用Python在PDF中绘制多种图形的操作示例》在进行PDF自动化处理时,人们往往首先想到的是文本生成、图片嵌入或表格绘制等常规需求,然而在许多实际业务场景中,能够在PDF中灵活绘制图形同样至关重... 目录1. 环境准备2. 创建 PDF 文档与页面3. 在 PDF 中绘制不同类型的图形python

Python绘制TSP、VRP问题求解结果图全过程

《Python绘制TSP、VRP问题求解结果图全过程》本文介绍用Python绘制TSP和VRP问题的静态与动态结果图,静态图展示路径,动态图通过matplotlib.animation模块实现动画效果... 目录一、静态图二、动态图总结【代码】python绘制TSP、VRP问题求解结果图(包含静态图与动态图

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

PyCharm如何更改缓存位置

《PyCharm如何更改缓存位置》:本文主要介绍PyCharm如何更改缓存位置的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm更改缓存位置1.打开PyCharm的安装编程目录2.将config、sjsystem、plugins和log的路径

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮