Swift初体验 (一)

//  声明一个常量
let maxNumberOfStudents: Int = 47

//  声明一个变量,如果没有在声明的时候初始化,需要显示的标注其类型
var currentNumberOfStudents = 23

//  使用前必须初始化
currentNumberOfStudents += 1

//  浮点数据自动推断为Double类型,如果需要指定了Float类型,需要显示的指定Float类型
let score: Float = 90.5;

let englishScore = 80
let chineseScore = 90.5;

//  不同类型的数据不能直接进行运算,需要自己手动转换为相同的格式,格式是:Type(Value)
let allScore = Double(englishScore) + chineseScore

println("Int8 max value = \(Int8.max)")

var name: String = “HMT"

//  显示的声明一个字符类型
let sex: Character = “m"



var names: Array<String> = ["hmt","wdq1"]
var namesT: String[] = ["hmt","wdq"]
//var nameQ: NSArray = ["aaa","bbb","ccc"]
namesT += "qqqqq”
//  数组即使是不可变的,依然可以改变它的值
namesT[1] = “1111"
//  2个点半开半闭  3个点全闭
namesT[1..2] = ["buzhidao","heheheheh"];
println("\(namesT)”)



for (index,value) in enumerate(namesT){

    println("\(index) \(value)")
}

var sexDic: Dictionary<String,String> = ["zhuwenpeng":"m","zhaoweisong":"m”]
//  如果字典中不存在这个键值对,则会添加;如果存在,就会替换修改
sexDic["chenfengchang"] = "m"
println(sexDic["chenfengchang"])
for (key,value) in sexDic{

    println("key = \(key) value = \(value)")
    println(sexDic["chenfengchang"])
}
//  "_"代表忽略元祖中的某个位置
for (_,value) in sexDic{

    println("value = \(value)")
}

let firstSex = sexDic["chenfengchang”]
//  字符串判断用”=="
let isMale = firstSex == "m"
//  判断只接受布尔值
if isMale{

}else{

}

//  元组
let status:(Int, String) = (404,"Not Found")
println("statusCode = \(status.0) statusMessage = \(status.1)")

let status1:(statusCode:Int,statusMessage:String) = (statusCode:404,statusMessage:"Not Found")
println("statusCode = \(status1.statusCode) statusMessage = \(status1.statusMessage)")

let (statusCode,statusMessage) = (404,"Not Found")
println("statusCode = \(statusCode) statusMessage = \(statusMessage)")


let countStr = "333"
// toInt()方法返回的是一个Int类型的可选变量,可能为空,加”?"修饰
let count: Int? = countStr.toInt()

if count{
    let realCount = count!  //  强制解析
    println("realCount = \(realCount)")
}else{
    
}
//  先判断count是否有值,如果有值则把值付给realCount,如果没有就进入else
if let realCount = count{
    println("realCount = \(realCount)")
}else{

}

let point = (x: 2,y: 2)
switch(point){
case (0,0):
    println("")
case (let x,0):
    println("")
case (0,let y):
    println("")
case (let x,let y):
    println("")
}

switch(point){
case (let x,let y) where x == y:
    println("point在 x=y 这条线上")
case (let x,let y) where x == -y:
    println("")
case (let x,let y):
    println("")
}

let number = 122
switch(number){
case 0...9:
    println()
case 10...99:
    println()
case 100...999:
    println()
    fallthrough  //  相当于C语言中的switch不加break效果
default:
    println()
}

let tempString = "iyoipolk"
tempName: for letter in tempString{
    switch(letter){
    case "a", "e", "i", "o", "u":
        println("letter 是一个元音字母")
        break tempName
    default:
        println("letter 是一个辅音字母")
    }
}

资源下载链接为: https://pan.quark.cn/s/67c535f75d4c 在机器人技术中,轨迹规划是实现机器人从个位置平稳高效移动到另个位置的核心环节。本资源提供了套基于 MATLAB 的机器人轨迹规划程序,涵盖了关节空间和笛卡尔空间两种规划方式。MATLAB 是种强大的数值计算与可视化工具,凭借其灵活易用的特点,常被用于机器人控制算法的开发与仿真。 关节空间轨迹规划主要关注机器人各关节角度的变化,生成从初始配置到目标配置的连续路径。其关键知识点包括: 关节变量:指机器人各关节的旋转角度或伸缩长度。 运动学逆解:通过数学方法从末端执行器的目标位置反推关节变量。 路径平滑:确保关节变量轨迹连续且无抖动,常用方法有 S 型曲线拟合、多项式插值等。 速度和加速度限制:考虑关节的实际物理限制,确保轨迹在允许的动态范围内。 碰撞避免:在规划过程中避免关节与其他物体发生碰撞。 笛卡尔空间轨迹规划直接处理机器人末端执行器在工作空间中的位置和姿态变化,涉及以下内容: 工作空间:机器人可到达的所有三维空间点的集合。 路径规划:在工作空间中找到条从起点到终点的无碰撞路径。 障碍物表示:采用二维或三维网格、Voronoi 图、Octree 等数据结构表示工作空间中的障碍物。 轨迹生成:通过样条曲线、直线插值等方法生成平滑路径。 实时更新:在规划过程中实时检测并避开新出现的障碍物。 在 MATLAB 中实现上述规划方法,可以借助其内置函数和工具箱: 优化工具箱:用于解决运动学逆解和路径规划中的优化问题。 Simulink:可视化建模环境,适合构建和仿真复杂的控制系统。 ODE 求解器:如 ode45,用于求解机器人动力学方程和轨迹执行过程中的运动学问题。 在实际应用中,通常会结合关节空间和笛卡尔空间的规划方法。先在关节空间生成平滑轨迹,再通过运动学正解将关节轨迹转换为笛卡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值