gpt4 book ai didi

ios - 如何在 Swift 中获取一条线上的所有点?

转载 作者:行者123 更新时间:2023-11-29 02:14:59 25 4
gpt4 key购买 nike

我正在用 Swift 编写一个程序,它需要一种方法,该方法使用两个 CGPoints 的规范并返回它们之间直线上的所有点。目前我正在试用以下方法,但它非常故障并且拒绝为某些行获得所有分数。我只是想知道是否有更有效的方法来做到这一点?

func addPointsInLine(#start: CGPoint, end: CGPoint){

var speed = 0
var startNo = trackPoints.count
var endNo = startNo

var xDiff = start.x - end.x
var yDiff = start.y - end.y

var xChange = 0.0
var yChange = 0.0

var newPointX = start.x
var newPointY = start.y

var ended = false

xChange = Double(xDiff) / Double(yDiff)
yChange = Double(yDiff) / Double(xDiff)

/*if(xDiff > 0){
xChange = sqrt(xChange * xChange)
}
if(yDiff > 0){
yChange = sqrt(yChange * yChange)
}*/

println("xc \(xChange)")
println("yc \(yChange)")

var y = Double(start.y)
var x = Double(start.x)

while !ended {
println(trackPoints.count)
speed++
endNo++
if(CGPointMake(newPointX, newPointY) == end){
ended = true
}

if(yChange > xChange){
y++
x += xChange
trackPoints.append(TrackPoint(x: Int(x), y: Int(y)))
if(CGFloat(Int(y)) == end.y){
ended = true
println("end")
//break
}
/* if(yChange > 0){
if(CGFloat(Int(y)) > end.y){
ended = true
println("end>y")
// break
}
}
if(yChange < 0){
if(CGFloat(Int(y)) < end.y){
ended = true
println("end<y")
//break
}
}*/
if(xChange > 0){
if(CGFloat(Int(x)) >= end.x){
ended = true
println("end>x")
//break
}
}
if(xChange < 0){
if(CGFloat(Int(x)) <= end.x){
ended = true
println("end<x")
//break
}
}
} else {
x++
y += yChange
trackPoints.append(TrackPoint(x: Int(x), y: Int(y)))
if(CGFloat(Int(x)) == end.x){
ended = true
println("end")
//break
}
/* if(xChange > 0){
if(CGFloat(Int(x)) >= end.x){
ended = true
println("end>x")
//break
}
}
if(xChange < 0){
if(CGFloat(Int(x)) <= end.x){
ended = true
println("end<x")
//break
}
}*/
if(yChange > 0){
if(CGFloat(Int(y)) > end.y){
ended = true
println("end>y")
// break
}
}
if(yChange < 0){
if(CGFloat(Int(y)) < end.y){
ended = true
println("end<y")
//break
}
}
}

}

println("finished")

var i = startNo
println(startNo)
println(endNo)
while i < endNo {
trackPoints[i].speed = speed
i++
}
println("finish2")

}

最佳答案

我认为首先找到所有点是不可能的,因为直线上有无限多个点。以连接 (0,0) 到 (1, 0) 的线为例。以下所有点以及更多点都在上述线上 (0.00001,0) (0.0000000000001,0) (0.01,0)

所以你需要限制你需要找到的点的数量,就像所有具有整数坐标的点一样。所有点相距 1 个单位,从起点等开始。

接下来您可以使用其中一个直线方程来获得分数:Equations of Line

关于ios - 如何在 Swift 中获取一条线上的所有点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28854694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com