`
laladin.syd
  • 浏览: 8450 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

图片旋转翻转和初始坐标系的关系

阅读更多

package laladin.angleTest;
 
import java.util.ArrayList;
import java.util.List;
 
 
 
public class AngleTest {
 
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String state="1234";
int key;
List<Integer> list=new ArrayList<Integer>();
StringBuffer sb=new StringBuffer();
for(int i=0;i<100;i++){
key=(int)(Math.random()*5);
switch (key) {
case 0:
//转90
list.add(90);
state=rotate(state,90);
sb.append("转90,");
break;
case 1:
//转180
list.add(180);
sb.append("转180,");
state=rotate(state,180);
break;
case 2:
//转270
list.add(270);
sb.append("转270,");
state=rotate(state,270);
break;
case 3:
//水平
list.add(-1);
sb.append("水平,");
state=hFlip(state);
break;
case 4:
//垂直
list.add(-2);
sb.append("垂直,");
state=vFlip(state);
break;
}
}
System.out.println(sb.toString());
System.out.println(state);
state="1234";
int aa=rotateAndFlip(list);
if(aa<0)
state=hFlip(state);
state=rotate(state,Math.abs(aa));
System.out.println(state);
}
public static String rotate(String string,int degree){
switch (degree) {
case 90:
string=string.substring(3)+string.substring(0, 3);
break;
case 180:
string=string.substring(2)+string.substring(0,2);
break;
case 270:
string=string.substring(1)+string.substring(0,1);
break;
}
return string;
}
public static String hFlip(String string){
string=string.substring(1,2)+string.substring(0,1)+string.substring(3)+string.substring(2,3);
return string;
}
public static String vFlip(String string){
string=string.substring(3)+string.substring(2,3)+string.substring(1,2)+string.substring(0,1);
return string;
}
/**
* 旋转和翻转过后与原图的比较
* @param list 得到的步骤集合,-1表示水平翻转,-2表示垂直翻转,0到360表示旋转度数.
* @return 返回结果,数值表示需要顺时针旋转的度数,符号位表示是否需要水平翻转.<br />
* 如果得到的是一个正数,那么原图只需做相应度数的顺时针旋转<br />
* 如果得到的是一个负数,那么原图需要先做一次水平翻转,再做相应度数的顺时针旋转.<br />
*/
public static int rotateAndFlip(List<Integer> list){
/**是否需要翻转**/
boolean needRotate=false;
/**需要旋转的度数**/
int degree=0;
for (Integer integer : list) {
switch (integer) {
case -1://水平翻转
if(needRotate=!needRotate)
degree=360-degree;
else
degree=-degree;
break;
case -2://垂直翻转
degree=180-degree;
needRotate=!needRotate;
break;
default:
degree=degree+integer;
break;
}
if (degree<0) degree=degree+360;
if (degree>=360) degree=degree-360;
}
if (needRotate)degree=-degree;
if(needRotate && degree==0)return -360;
return degree;
}
}
 
分享到:
评论

相关推荐

    css3 3d翻转动画效果-简单的css3翻转动画效果代码

    2. **3D转换坐标系**:3D转换涉及到一个三维空间坐标系,X轴、Y轴和Z轴共同构建了这个空间。通过调整这些轴的旋转角度,可以实现元素的不同维度的翻转效果。 3. **perspective属性**:为了使3D效果看起来更加真实,...

    OpenCvSharp的图像基本处理功能:平移、旋转、镜像、映射

    以上就是使用OpenCvSharp进行图像平移、旋转、镜像翻转和映射的基本步骤。在实际应用中,你可能需要根据具体需求调整参数,例如旋转的角度、平移的距离、翻转的方向等。同时,注意处理图像时可能出现的边界问题,...

    照相机示例

    X轴、Y轴和Z轴构成笛卡尔坐标系,每个轴的正方向分别代表右、上和远离观察者的方向。照片翻转通常涉及到旋转操作,包括绕X轴(水平翻转)、Y轴(垂直翻转)和Z轴(透视翻转)的旋转。 1. **X轴翻转**:绕X轴的翻转...

    3D自动旋转城市地图(湖南)区域柱图显示;echarts解决方案附所有代码;可以更换成任意省市

    为了实现自动旋转效果,你需要利用Echarts的动画功能,设置`animation`属性为true,并通过定时器更新`RoamController`的`beta`和`alpha`角度,从而让地图持续旋转。 在实际应用中,你需要处理的数据包括地理位置...

    js前端图片预览插件

    通常,我们需要先计算出旋转后的坐标系,以便正确地在Canvas上绘制旋转后的图像。 - **翻转**:有两种主要的翻转方式,水平翻转和垂直翻转,这可以通过设置`drawImage()`方法的宽高参数为负值来实现。 ### 4. 实现...

    yolov5口罩数据集

    训练过程中可能还需要进行数据增强,如翻转、旋转、缩放等,以增加模型的鲁棒性。 **关键知识点** 1. **目标检测**:YOLOv5是目标检测的一种方法,可以同时预测图片中的多个物体的位置和类别,对于口罩检测任务,...

    license-plate-dataset-master.zip

    对于这样的小型数据集,可能需要进行数据增强来扩大训练集,包括翻转、旋转、缩放等操作,以提高模型的泛化能力。同时,由于数据量较小,可能会遇到过拟合问题,因此可能需要使用正则化技术,如dropout或早停策略,...

    基于yolov5 的AI识别

    1. **数据增强(Data Augmentation)**:通过随机翻转、缩放、旋转等操作增加训练样本的多样性,提升模型的泛化能力。 2. **Mosaic数据增强**:在训练过程中,将四个随机选择的图像拼接在一起,进一步提高了模型对...

    iOS动画高级技巧

    `CALayer`的坐标系是从左下角开始的,这与`UIView`从左上角开始的坐标系有所不同。了解这一点对于正确地进行布局和变换至关重要。 **Hit Testing** Hit Testing是指确定屏幕上的某个触点是否命中了特定图层的过程...

    C#.net_经典编程例子400个

    175 实例119 局部图像放大 175 实例120 浏览大图片 177 实例121 剪切图片 178 实例122 图像旋转 181 实例123 鼠标拖拽图像 182 4.4 图形缩放与变换 183 实例124 如何放大和缩小...

Global site tag (gtag.js) - Google Analytics