文章标题
来源:互联网 发布:win10优化不了怎么办 编辑:程序博客网 时间:2024/06/05 14:27
借鉴二分法的思想,提出了一种近似计算曲线外一点到曲线的最短距离的算法,我们将其命名为ILS算法。其具体步骤如下:
算法 ILS Algorithm
算法输入:待求解的点 equation.pdf,曲线 equation_1.pdf,循环次数 equation_2.pdf。
步骤一:取曲线上的点 equation_3.pdf。
步骤二:记 equation_4.pdf 中横坐标较小的一点为 equation_5.pdf,较大的一点为 equation_6.pdf,并检验equation_7.pdf 是否为真。如果为真,则停止算法,输出 equation_8.pdf 三条线段中最短的线段的长度;若为假,则继续算法。
步骤三:记 equation_9.pdf,判断equation_10.pdf 是否成立。若成立,则记点 equation_11.pdf 为新点 equation_12.pdf,新点 equation_13.pdf 的横坐标为点 equation_14.pdf 与点 equation_15.pdf 的横坐标的算术平均数,且新点 equation_16.pdf 仍在曲线上;若不成立,首先判断 equation_17.pdf是否成立,若表达式成立,则结束算法,输出 equation_18.pdf 的长度,否则,记点 equation_19.pdf 为新点 equation_20.pdf,新点 equation_13.pdf 的横坐标为点 equation_14.pdf 与点 equation_15.pdf 的横坐标的算术平均数,且新点 equation_16.pdf 仍在曲线上。
步骤四:如果步骤循环次数还未达到 equation_21.pdf,则返回步骤二,否则输出 equation_8.pdf 三条线段中最短的线段的长度
该算法的核心是二分逼近,而逼近的过程已经在算法中阐明,只要能无限逼近甚至达到切点,则方法成功。该算法可以较为便捷的在计算机上实现,在计算点到曲线的距离时有不错的效果。
实现该算法的R语言代码如下:
# 1.xls是附件一表格# 22.xlsx是经过处理的附件二表格library(xlsx)phi <- 0.05 workspace1 <- "1.xls"mydata1 <- read.xlsx(workspace1,1)workspace2 <- "22.xlsx"mydata2 <- read.xlsx(workspace2,1)F <- function (arg1,arg2,arg3,arg4){ phi <- 0.02 if ( ( ( arg1 - arg3 ) * (arg1 - arg3) + (arg2 - arg4) * (arg2 - arg4) ) <= phi * phi) { return(1); } else { return(0); }}posx_mission <- mydata1$经度posy_mission <- mydata1$纬度posy_people <- mydata2$经纬度posx_people <- mydata2$预订任务限额price <- mydata1$任务标价print(posx_mission[1])print(posy_mission[1])print(posx_people[1])print(posy_people[1])N <- rep(0,length(posx_mission))for (index in 1:length(N) ){ for (i in 1:length(posx_people) ) { N[index] <- N[index] + F(posx_mission[index] , posy_mission[index] , posx_people[i],posy_people[i]) }}x <- rep(1,length(posx_mission));pdf("my.pdf")plot(N,price,col="RED")dev.off()com <- c()com_price <- c()ncom <- c()ncom_price <- c()for (index in 1:length(N)){ if(mydata1$任务执行情况[index] == 1) { com <- c(com,N[index]) com_price <- c(com_price,price[index]) } else { ncom <- c(ncom,N[index]) ncom_price <- c(ncom_price,price[index]) }}pdf("my1.pdf")plot(com,com_price,col="BLUE")points(ncom,ncom_price,col="RED")dev.off()k <- 1000mF <- function(x0, y0, k, n){ ax <- k / ceiling(y0) ay <- y0 bx <- x0 by <- k / ceiling(x0) cx <- ( ax + bx ) / (2) cy <- k / ceiling(cx) lx <- 0 lf <- 0 rx <- 0 ry <- 0 if( ax <bx ) { lx <- ax ly <- ay rx <- bx ry <- by } else { lx <- bx ly <- by rx <- ax ry <- ay } for (i in (1):n ) { if( (lx - x0 )*(lx - x0) + (ly - y0) * (ly + k) < 0 || (rx - x0) * (rx + 1 ) + (ry - y0)*(ry - k) < 0) { sl <- sqrt((x0-lx) * (x0-lx) + (y0 - ly)*(y0-ly)) sr <- sqrt((x0-rx) * (x0-rx) + (y0 - ry)*(y0-ry)) sc <- sqrt((x0-cx) * (x0-cx) + (y0 - cy)*(y0-cy)) if(sl <= sr && sl <= sc) {return(sl) } else{ if(sr <= sl && sr <= sc) return(sr) else{ return(sc) } } } if((cx - x0 )*(cx - x0) + (cy - y0) * (cy + k) > 0 ) { lx <- cx; ly <- cy; cx <- (lx + rx) / 2 cy <- k / ceiling(cx) } else { if((cx - x0)*(cx-(1) ) + (cy - y0)*(cy+k) == 0 ) { sc <- sqrt((x0-cx) * (x0-cx) + (y0 - cy)*(y0-cy)) return(sc) } else { rx <- cx ry <- cy cx <- (lx + rx) / (2) cy <- k / ceiling(cx) } } } sl <- sqrt((x0-lx) * (x0-lx) + (y0 - ly)*(y0-ly)) sr <- sqrt((x0-rx) * (x0-rx) + (y0 - ry)*(y0-ry)) sc <- sqrt((x0-cx) * (x0-cx) + (y0 - cy)*(y0-cy)) if(sl <= sr && sl <= sc) return(sl) if(sr <= sl && sr <= sc) return(sr) return(sc)}for (newK in 650:850){newP <- c()newN <- c()for (index in 1:length(N)){ if(price[index] <= 75) { newP <- c(newP,price[index]) newN <- c(newN,N[index]) }}dis <- 0for(index in 1:length(newN)){ newN[index] <- newN[index] + 1}for (index in 1:length(newN)){ dis <- dis + mF(newN[index],newP[index],newK,5)}print(newK)print(dis)}
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 二叉树的非递归遍历——前序
- SQL优化-索引
- 101. Symmetric Tree
- maven创建项目后pom.xml报错Failure to transfer org.codehaus.plexus:plexus-xx:pom:x.0 from
- Fragment+FragmentTabHost实现底部菜单栏
- 文章标题
- TCP/IP、Http、Soap三个基本的通讯协议有什么区别
- Atitit 防烫伤指南与规范 attilax总结
- 文件断点下载
- JDBC基础操作一套
- Mysql数据库 常用操作语句
- 第三方完成频道管理
- byte vs char 小结
- CSStask1-创建九宫格