Java 实现输入公历日期输出农历日期、生肖、天干地支、节日、节气等信息
最近的工作中客户要求前台页面展示日历,日历内容包括:农历年月日日、公历年月日、生肖、天干地支、农历节日、公历节日、24节气等信息,之前在网上查找资料关于Java实现方面的文章不少,但是大多数针对节气、农历节日的计算不够精确。后来根据相关资料自己开发并完善了这一需求。实现代码如下:
package myTools;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
/**
* 获取输入公历日期的生肖、天干地支、农历年、农历月、农历日、公历节日、农历节日、24节气等数据
* DATE 2020.08.13
*/
public class LunarCalendarFestivalUtils {
//生肖年
private String animal;
//干支年
private String ganZhiYear;
//阴历年
private String lunarYear;
//阴历月
private String lunarMonth;
//阴历日
private String lunarDay;
//阳历节日
private String solarFestival;
//阴历节日
private String lunarFestival;
//节气
private String lunarTerm;
/**
* 获取查询日期的年份生肖
* @return
*/
public String getAnimal() {
return animal;
}
/**
* 获取查询日期年份的天干地支
* @return
*/
public String getGanZhiYear() {
return ganZhiYear;
}
/**
* 获取查询日期的农历年份
* @return
*/
public String getLunarYear() {
return lunarYear;
}
/**
* 获取查询日期的农历月份
* @return
*/
public String getLunarMonth() {
return lunarMonth;
}
/**
* 获取查询日期的农历日
* @return
*/
public String getLunarDay() {
return lunarDay;
}
/**
* 获取查询日期的公历节日(不是节日返回空)
* @return
*/
public String getSolarFestival() {
return solarFestival;
}
/**
* 获取查询日期的农历节日(不是节日返回空)
* @return
*/
public String getLunarFestival() {
return lunarFestival;
}
/**
* 获取查询日期的节气数据(不是节气返回空)
* @return
*/
public String getLunarTerm() {
return lunarTerm;
}
final static long[] lunarInfo = new long[] {
0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,
0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,
0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,
0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,
0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,
0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0,
0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,
0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,
0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,
0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0,
0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,
0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,
0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,
0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,
0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0
};
//阳历天数
final static int[] solarMonths = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//生肖
final static String[] animals = new String[]{"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"};
//天干
final static String[] tGan = new String[] { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };
//地支
final static String[] dZhi = new String[] { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };
//二十四节气
final static String[] solarTerms = new String[]{"小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏",
"小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至"};
//二十四节气日期偏移度
private static final double D = 0.2422;
//特殊年份节气日期偏移
private final static Map<Integer,Integer[]> INCREASE_OFFSETMAP = new HashMap<Integer, Integer[]>();//+1偏移
private final static Map<Integer,Integer[]> DECREASE_OFFSETMAP = new HashMap<Integer, Integer[]>();//-1偏移
static {
INCREASE_OFFSETMAP.put(0, new Integer[]{1982});//小寒
DECREASE_OFFSETMAP.put(0, new Integer[]{2019});//小寒
INCREASE_OFFSETMAP.put(1, new Integer[]{2082});//大寒
DECREASE_OFFSETMAP.put(3, new Integer[]{2026});//雨水
INCREASE_OFFSETMAP.put(5, new Integer[]{2084});//春分
INCREASE_OFFSETMAP.put(9, new Integer[]{2008});//小满
INCREASE_OFFSETMAP.put(10, new Integer[]{1902});//芒种
INCREASE_OFFSETMAP.put(11, new Integer[]{1928});//夏至
INCREASE_OFFSETMAP.put(12, new Integer[]{1925,2016});//小暑
INCREASE_OFFSETMAP.put(13, new Integer[]{1922});//大暑
INCREASE_OFFSETMAP.put(14, new Integer[]{2002});//立秋
INCREASE_OFFSETMAP.put(16, new Integer[]{1927});//白露
INCREASE_OFFSETMAP.put(17, new Integer[]{1942});//秋分
INCREASE_OFFSETMAP.put(19, new Integer[]{2089});//霜降
INCREASE_OFFSETMAP.put(20, new Integer[]{2089});//立冬
INCREASE_OFFSETMAP.put(21, new Integer[]{1978});//小雪
INCREASE_OFFSETMAP.put(22, new Integer[]{1954});//大雪
DECREASE_OFFSETMAP.put(23, new Integer[]{1918,2021});//冬至
}
//定义一个二维数组,第一维数组存储的是20世纪的节气C值,第二维数组存储的是21世纪的节气C值,0到23个,依次代表立春、雨水...大寒节气的C值
private static final double[][] CENTURY_ARRAY = {
{6.11,20.84,4.6295,19.4599,6.3826,21.4155,5.59,20.888,6.318,21.86,6.5,22.2,7.928,23.65,8.35,23.95,8.44,23.822,9.098,24.218,8.218,23.08,7.9,22.6},
{5.4055,20.12,3.87,18.73,5.63,20.646,4.81,20.1,5.52,21.04,5.678,21.37,7.108,22.83,7.5,23.13,7.646,23.042,8.318,23.438,7.438,22.36,7.18,21.94}
};
//农历月份
final static String lunarNumber[] = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };
//农历年
final static String[] lunarYears = new String[]{"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
final static String[] chineseTen = new String[]{"初", "十", "廿", "卅"};
//农历节日
final static String[] lunarHoliday = new String[] {"0101 春节", "0115 元宵节", "0202 龙头节", "0505 端午节", "0707 七夕节", "0715 中元节",
"0815 中秋节", "0909 重阳节", "1001 寒衣节", "1015 下元节", "1208 腊八节", "1223 小年" };
//公立节日
final static String[] solarHoliday = new String[] { "0101 元旦", "0214 情人节", "0308 妇女节", "0312 植树节", "0315 消费者权益日",
"0401 愚人节", "0422 地球日", "0423 读书日", "0501 劳动节", "0504 青年节", "0512 护士节", "0518 博物馆日", "0519 旅游日", "0601 儿童节",
"0701 建党节", "0801 建军节", "0910 教师节","1001 国庆节", "1024 联合国日", "1204 宪法日", "1224 平安夜", "1225 圣诞节"};
//格式化日期
static SimpleDateFormat chineseDateFormat = new SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA);
static SimpleDateFormat solarDateFormat = new SimpleDateFormat("yyyy-MM-dd");
/**
* 返回农历y年的总天数
* @param y
* @return
*/
private int lunarYearDays(int y) {
int i, sum = 348;
for (i = 0x8000; i > 0x8; i >>= 1) {
sum += ((lunarInfo[y - 1900] & i) != 0 ? 1 : 0);
}
return (sum + leapDays(y));
}
/**
* 返回农历y年闰月的天数
*/
private int leapDays(int y) {
if (leapMonth(y) != 0) {
return ((lunarInfo[y - 1900] & 0x10000) != 0 ? 30 : 29 );
} else
return 0;
}
/**
* 判断y年的农历中那个月是闰月,不是闰月返回0
* @param y
* @return
*/
private int leapMonth(int y) {
return (int) (lunarInfo[y - 1900] & 0xf);
}
/**
* 返回农历y年m月的总天数
* @param y
* @param m
* @return
*/
private int monthDays(int y, int m) {
return ((lunarInfo[y - 1900] & (0x10000 >> m))!=0 ? 30 : 29);
}
/**
* 获取阴历年
* @param year
* @return
*/
private String getLunarYearString(String year) {
int y1 = Integer.parseInt(year.charAt(0)+"");
int y2 = Integer.parseInt(year.charAt(1)+"");
int y3 = Integer.parseInt(year.charAt(2)+"");
int y4 = Integer.parseInt(year.charAt(3)+"");
return lunarYears[y1]+lunarYears[y2]+lunarYears[y3]+lunarYears[y4];
}
/**
* 获取阴历日
*/
private String getLunarDayString(int day) {
int n = day % 10 == 0 ? 9 : day % 10 - 1;
if (day > 30)
return "";
if (day == 10)
return "初十";
else
return chineseTen[day / 10] + lunarNumber[n];
}
/**
* 特例,特殊的年分的节气偏移量,由于公式并不完善,所以算出的个别节气的第几天数并不准确,在此返回其偏移量
* @param year 年份
* @param n 节气编号
* @return 返回其偏移量
*/
private int specialYearOffset(int year,int n) {
int offset = 0;
offset += getOffset(DECREASE_OFFSETMAP,year,n,-1);
offset += getOffset(INCREASE_OFFSETMAP,year,n,1);
return offset;
}
/**
* 节气偏移量计算
* @param map
* @param year
* @param n
* @param offset
* @return
*/
private int getOffset(Map<Integer,Integer[]> map,int year,int n,int offset){
int off = 0;
Integer[] years = map.get(n);
if(null != years){
for(int i:years){
if(i == year){
off = offset;
break;
}
}
}
return off;
}
/**
* 获取某年的第n个节气为几日(从0小寒起算)
* @param year
* @param n
* @return
*/
private int sTerm(int year, int n) {
double centuryValue = 0;//节气的世纪值,每个节气的每个世纪值都不同
int centuryIndex = -1;
if(year>=1901 && year<=2000){//20世纪
centuryIndex = 0;
} else if(year>=2001 && year <= 2100){//21世纪
centuryIndex = 1;
} else {
throw new RuntimeException("不支持此年份:"+year+",目前只支持1901年到2100年的时间范围");
}
centuryValue = CENTURY_ARRAY[centuryIndex][n];
int dateNum = 0;
int y = year%100;//步骤1:取年分的后两位数
if(year%4 == 0 && year%100 !=0 || year%400 ==0){//闰年
if(n == 0 || n == 1 || n == 2 || n == 3){
//注意:凡闰年3月1日前闰年数要减一,即:L=[(Y-1)/4],因为小寒、大寒、立春、雨水这两个节气都小于3月1日,所以 y = y-1
y = y-1;//步骤2
}
}
dateNum = (int)(y*D+centuryValue)-(int)(y/4);//步骤3,使用公式[Y*D+C]-L计算
dateNum += specialYearOffset(year,n);//步骤4,加上特殊的年分的节气偏移量
return dateNum;
}
/**
* 母亲节和父亲节
* @param year
* @param month
* @param day
* @return
*/
private String getMotherOrFatherDay(int year, int month, int day) {
if (month != 5 && month != 6) return null;
if ((month == 5 && (day < 8 || day > 14)) || (month == 6 && (day < 15 || day > 21))) return null;
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
int weekDate = calendar.get(Calendar.DAY_OF_WEEK);
weekDate = (weekDate == 1) ? 7 : weekDate - 1;
switch (month) {
case 5:
if (day == 15 - weekDate) {
return "母亲节";
}
break;
case 6:
if (day == 22 - weekDate) {
return "父亲节";
}
break;
}
return null;
}
/**
* 感恩节
* @param year
* @param month
* @param day
* @return
*/
private String thanksgiving(int year, int month, int day) {
if (month != 11) return null;
if ((month == 11 && (day < 19 || day > 28))) return null;
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
int weekDate = calendar.get(Calendar.DAY_OF_WEEK);
weekDate = (weekDate == 1) ? 7 : weekDate - 1;
switch (month) {
case 11:
if (day == 29 - weekDate + 4) {
return "感恩节";
}
break;
}
return null;
}
/**
* 获取复活节
* @param year
* @param month
* @param day
* @return
*/
private String getEasterDay(int year, int month, int day) {
int n = year - 1900;
int a = n % 19;
int q = n / 4;
int b = (7 * a + 1) / 19;
int m = (11 * a + 4 - b) % 29;
int w = (n + q + 31 - m) % 7;
int answer = 25 - m - w;
String easterDay = "";
if (answer > 0) {
easterDay = year+"-"+4+"-"+answer;
} else {
easterDay = year+"-"+3+"-"+(31 + answer);
}
String searchDay = year+"-"+month+"-"+day;
if(searchDay.equals(easterDay)) {
return "复活节";
}
return null;
}
/**
* 输入公历日期初始化当前日期的生肖、天干地支、农历年、农历月、农历日、公历节日、农历节日、24节气
* 输入日期的格式为(YYYY-MM-DD)
* @param currentDate
*/
public void initLunarCalendarInfo(String currentDate){
String[] splitDate = currentDate.split("-");
//设置生肖
int year = Integer.parseInt(splitDate[0]);
this.animal=animals[(year - 4) % 12];
//设置天干地支
int num = year - 1900 + 36;
this.ganZhiYear = (tGan[num % 10] + dZhi[num % 12]);
///////////设置阴历/////////////////////////////////////////////////////////
//基准日期
Date baseDate = null;
//当前日期
Date nowaday = null;
try {
baseDate = chineseDateFormat.parse("1900年1月31日");
nowaday = solarDateFormat.parse(currentDate);
} catch (ParseException e) {
e.printStackTrace();
}
// 获取当前日期与1900年1月31日相差的天数
int offset = (int) ((nowaday.getTime() - baseDate.getTime()) / 86400000L);
//用offset减去每农历年的天数,计算当天是农历第几天 iYear最终结果是农历的年份
int iYear, daysOfYear = 0;
for (iYear = 1900; iYear < 10000 && offset > 0; iYear++) {
daysOfYear = lunarYearDays(iYear);
offset -= daysOfYear;
}
if (offset < 0) {
offset += daysOfYear;
iYear--;
}
this.lunarYear = getLunarYearString(iYear+"");
int leapMonth = leapMonth(iYear); // 闰哪个月,1-12
boolean leap = false;
// 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天
int iMonth, daysOfMonth = 0;
for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) {
// 闰月
if (leapMonth > 0 && iMonth == (leapMonth + 1) && !leap) {
--iMonth;
leap = true;
daysOfMonth = leapDays(iYear);
} else
daysOfMonth = monthDays(iYear, iMonth);
offset -= daysOfMonth;
// 解除闰月
if (leap && iMonth == (leapMonth + 1))
leap = false;
}
// offset为0时,并且刚才计算的月份是闰月,要校正
if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) {
if (leap) {
leap = false;
} else {
leap = true;
--iMonth;
}
}
// offset小于0时,也要校正
if (offset < 0) {
offset += daysOfMonth;
--iMonth;
}
// 设置对应的阴历月份
this.lunarMonth = lunarNumber[iMonth - 1] ;
if("一".equals(this.lunarMonth)){
this.lunarMonth ="正";
}
if("十二".equals(this.lunarMonth)){
this.lunarMonth ="腊";
}
if(leap){
this.lunarMonth ="闰"+this.lunarMonth;
}
//设置阴历日
int iDay = offset + 1;
this.lunarDay = getLunarDayString(iDay);
//设置节气
int month=Integer.parseInt(splitDate[1]);
int day=Integer.parseInt(splitDate[2]);
if (day == sTerm(year, (month - 1) * 2)){
this.lunarTerm = solarTerms[(month - 1) * 2];
}else if (day == sTerm(year, (month - 1) * 2 + 1)){
this.lunarTerm = solarTerms[(month - 1) * 2 + 1];
}else{
this.lunarTerm = "";
}
//设置阳历节日
String solarFestival="";
for (int i = 0; i < solarHoliday.length; i++) {
// 返回公历节假日名称
String sd = solarHoliday[i].split(" ")[0]; // 节假日的日期
String sdv = solarHoliday[i].split(" ")[1]; // 节假日的名称
String smonth_v = splitDate[1];
String sday_v = splitDate[2];
String smd = smonth_v + sday_v;
if (sd.trim().equals(smd.trim())) {
solarFestival = sdv;
break;
}
}
//判断节日是否是父亲节或母亲节
String motherOrFatherDay = getMotherOrFatherDay(year, month, day);
if(motherOrFatherDay != null ){
solarFestival = motherOrFatherDay;
}
//判断节日是否是复活节
String easterDay = getEasterDay(year, month, day);
if(easterDay != null ){
solarFestival = easterDay;
}
//判断节日是否是感恩节
String thanksgiving = thanksgiving(year, month, day);
if(thanksgiving != null ){
solarFestival = thanksgiving;
}
this.solarFestival = solarFestival;
//设置阴历节日
String lunarFestival="";
for (int i = 0; i < lunarHoliday.length; i++) {
//阴历闰月节日
if(leap){
break;
}
// 返回农历节假日名称
String ld = lunarHoliday[i].split(" ")[0]; // 节假日的日期
String ldv = lunarHoliday[i].split(" ")[1]; // 节假日的名称
String lmonth_v = iMonth + "";
String lday_v = iDay + "";
String lmd = "";
if (iMonth < 10) {
lmonth_v = "0" + iMonth;
}
if (iDay < 10) {
lday_v = "0" + iDay;
}
lmd = lmonth_v + lday_v;
if ("12".equals(lmonth_v)) { // 除夕夜需要特殊处理
if ((daysOfMonth == 29 && iDay == 29) || (daysOfMonth == 30 && iDay == 30)) {
lunarFestival = "除夕";
break;
}
}
if (ld.trim().equals(lmd.trim())) {
lunarFestival = ldv;
break;
}
}
if("清明".equals(this.lunarTerm)){
lunarFestival = "清明节";
}
this.lunarFestival = lunarFestival;
}
/**
* 测试方法
* @param args
*/
public static void main(String[] args) {
LunarCalendarFestivalUtils festival = new LunarCalendarFestivalUtils();
festival.initLunarCalendarInfo("2021-06-25");
System.out.println("农历"+festival.getLunarYear()+"年"+festival.getLunarMonth()+"月"+festival.getLunarDay()+"日");
System.out.println(festival.getGanZhiYear()+"【"+festival.getAnimal()+"】年");
System.out.println(festival.getLunarTerm());
System.out.println(festival.getSolarFestival());
System.out.println(festival.getLunarFestival());
}
}
Java 实现输入公历日期输出农历日期、生肖、天干地支、节日、节气等信息的更多相关文章
- JAVA 键盘输入数组,输出数组内容和最大值、最小值
package shuzu; import java.util.Scanner; import java.util.Arrays; public class shuzu { /** * @param ...
- 个人永久性免费-Excel催化剂功能第34波-提取中国身份证信息、农历日期转换相关功能
这两天又被刷朋友圈,又来了一个自主研发红芯浏览器,国产啊国产,这是谁的梦.就算国产了,自主了,无底线的夸大吹嘘无道德,企业如是,国家如是,大清已亡!再牛B的技术落在天天删敏感信息.无法治.无安全感可言 ...
- Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate
通过Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的优点,java8具有很多优点,现在网上查到的农历转换工具类都是基于jdk7及以前的类写的,下面使用ja ...
- iOS 获取公历、农历日期的年月日
iOS 获取公历.农历日期的年月日 介绍三种方法获取 Date (NSDate) 的年月日. 用 date 表示当前日期.测试日期为公历 2017 年 2 月 5 日,农历丁酉年,鸡年,正月初九. l ...
- iOS - 获取系统时间年月日,阳历(公历)日期转农历的方法
//获取当前时间 NSDate *now = [NSDate date]; NSLog(@" now date is: %@ ",now); NSCalendar *calenda ...
- Java -- 键盘输入 Scanner, BufferedReader。 系统相关System,Runtime。随机数 Randrom。日期操作Calendar
1. Scanner 一个基于正则表达式的文本扫描器,他有多个构造函数,可以从文件,输入流和字符串中解析出基本类型值和字符串值. public class Main { public static v ...
- atitit.农历的公式与原理以及农历日期运算
atitit.农历的公式与原理以及农历日期运算 1. 农历的概述1 2. 如何在电脑程序里面计算农历??1 3. 农历的公式2 4. 获取当日农历日历3 5. 历史日期公式加查表才能得到精确日期3 6 ...
- JAVA中日期转换和日期计算的方法
日期的格式有很多形式,在使用过程中经常需要转换,下面是各种类型转换的使用例子以及日期计算方法的例子. 一.不同格式日期相互转换方法 public class TestDateConvertUtil { ...
- java获取n个工作日后的日期, 排除周末和节假日(顺延)
一.写在前面 需求: 工作需要获取n个工作日后的日期, 需要排除weekend和holiday, holiday存在数据库中, 存入的形式是一个节日有起始日期和截止日期(以下文中有关于节假日的表截图) ...
随机推荐
- @FeignClient注解详解
Spring Cloud 是目前最火的微服务框架,Feign 作为基础组件之一,在 Spring Cloud 体系中发挥了重要的作用. 一.FeignClient注解 FeignClient注解被@T ...
- GUI版本的emacs
概要 emacs 配置 X11 配置 输入法配置 spacemacs 中的配置 fcitx 汉字显示方块的问题 总结 优势 劣势 概要 之前一直使用 terminal 版本的 emacs, 性能和显示 ...
- OpenCV开发笔记(七十):红胖子带你傻瓜式编译VS2017x64版本的openCV4
前言 红胖子来也!!! opencv_contrib是opencv提供额外的工具,提供一些基础算法,之前编译了不带opencv_contrib的版本,不带opencv_contrib的cuda硬 ...
- MeteoInfoLab脚本示例:inpolygon
inpollygon函数是用来判断带坐标(x/y)的数据是否在某个或者一组多边形(Polygon)中,返回的结果中如果做多边形内则值为1,否则值为-1.下面一个例子演示了利用一个shape文件和inp ...
- day06 Pyhton学习
一.昨日内容回顾 字典: 由{}表示,内部存储key:value 要求: key不能重复 key必须可哈希.不可变 value没有限制 没有索引和切片 增删改查 新增: dic.[新key]=valu ...
- 【C语言/C++程序员编程】一小时做出来的数字雨(一颗开花的树)!
相信大家看过许许多多的关于计算机黑客.骇客.人工智能.AI方面的电影,每当黑客入侵某个五角大楼,某个网站时,都会出现这样一副画面: 入侵 或者这样的: 数字雨 然后就轻而易举的成功入侵夺取管理员权限了 ...
- 【传递闭包】HDU 2157 How many ways??
UPD:现在才发现本题是个传递闭包 题目内容 春天到了,HDU校园里开满了花,姹紫嫣红,非常美丽. 葱头是个爱花的人,看着校花校草竞相开放,漫步校园,心情也变得舒畅. 为了多看看这迷人的校园,葱头决定 ...
- 联赛%你测试10T2:漫无止境的八月
题意: 思路: 有几个特殊的性质: 在不考虑q里面的单点修改,我们先只判断一个序列是否Yes. 我们注意到每次操作都是对一个长度为k的区间进行区间加减1的操作,所以我们如果将序列里面的数按%k分组,把 ...
- centos8平台安装redis6.0.1
一,redis的官网: https://redis.io/ redis6于5月3日正式发布,它的新增功能: acl 多线程io cluster proxy resp3协议 本文演示redis6.0.1 ...
- HTML DOM Document的实际应用
HTML文档中可以使用以下属性和方法: 属性 / 方法 描述 document.activeElement 返回当前获取焦点元素 document.addEventListener() 向文档添加句柄 ...