回答
您需要點之間進行插值。要獲得積分,最簡單的方法是將它們存儲到NSMutableArray
中。創建此數組並添加所有CGPoints,同時將它們添加到繪圖例程中的UIBezierPath
。如果這不可行,請參閱here關於如何從UIBezierPath
中提取點。見代碼如何實現你想要的:
-(float)getYValueFromArray:(NSArray*)a atXValue:(float)x
{
NSValue *v1, *v2;
float x1, x2, y1, y2;
// iterate through all points
for(int i=0; i<([a count]-1); i++)
{
// get current and next point
v1 = [a objectAtIndex:i];
v2 = [a objectAtIndex:i+1];
// return if value matches v1.x or v2.x
if(x==[v1 CGPointValue].x) return [v1 CGPointValue].y;
if(x==[v2 CGPointValue].x) return [v2 CGPointValue].y;
// if x is between v1.x and v2.x calculate interpolated value
if((x>[v1 CGPointValue].x) && (x<[v2 CGPointValue].x))
{
x1 = [v1 CGPointValue].x;
x2 = [v2 CGPointValue].x;
y1 = [v1 CGPointValue].y;
y2 = [v2 CGPointValue].y;
return (x-x1)/(x2-x1)*(y2-y1) + y1;
}
}
// should never reach this point
return -1;
}
-(void)test
{
NSMutableArray *a = [[NSMutableArray alloc] init];
[a addObject:[NSValue valueWithCGPoint:CGPointMake(0, 10)]];
[a addObject:[NSValue valueWithCGPoint:CGPointMake(10, 5)]];
[a addObject:[NSValue valueWithCGPoint:CGPointMake(15, 20)]];
[a addObject:[NSValue valueWithCGPoint:CGPointMake(20, 30)]];
[a addObject:[NSValue valueWithCGPoint:CGPointMake(35, 50)]];
[a addObject:[NSValue valueWithCGPoint:CGPointMake(50, 0)]];
float y = [self getYValueFromArray:a atXValue:22.5];
NSLog(@"Y value at X=22.5 is %.2f", y);
}
這將只適用於線段,而不是曲線。 –
是的,但他沒有要求曲線。他最初的問題非常模糊,可能無法回答。但是從他的第一條評論和圖片鏈接中,您可以看到由線條組成的圖表,這就是我提出此解決方案的原因。 – nullp01nter
你很棒@ nullp01nter,它真的幫了我很多好主意,不幸的是我的名聲還不足以投票回答你的答案,所以你可以投我的問題來投你的答案,對不起有點好笑:) –
@ nullp01nter感謝您的回答。正是我需要的! :) 這是我的SWIFT版本作爲擴展與陣列與PointXYs:
protocol PointXY {
var x : CGFloat { get set }
var y : CGFloat { get set }
}
extension CGPoint: PointXY { }
extension Array where Element: PointXY {
func getYValue(forX x: CGFloat) -> CGFloat? {
for index in 0..<(self.count - 1) {
let p1 = self[index]
let p2 = self[index + 1]
// return p.y if a p.x matches x
if x == p1.x { return p1.y }
if x == p2.x { return p2.y }
// if x is between p1.x and p2.x calculate interpolated value
if x > p1.x && x < p2.x {
let x1 = p1.x
let x2 = p2.x
let y1 = p1.y
let y2 = p2.y
return (x - x1)/(x2 - x1) * (y2 - y1) + y1
}
}
return nil
}
}
- 1. 如何在FlattenPathGeometry上的Point.Y上獲取Point.X - WPF
- 2. 從CGContextRef獲取UIBezierPath或CGPath
- 3. 獲取區和UIBezierPath IOS
- 4. 獲取軸承位置接近0的位置的point.x
- 5. 製作與uibezierpath
- 6. 試圖與UIBezierPath
- 7. 與UIBezierPath addClip
- 8. MySpace與iPhone集成
- 9. 獲取UIBezierPath中風的輪廓路徑
- 10. 獲取附加的UIBezierPath的邊界
- 11. 獲取UIBezierPath的所有頂點
- 12. 獲取關於CGpath,UIBezierPath的信息?
- 13. 多的UIView與UIBezierPath
- 14. 獲取與續集當月
- 15. iphone UIbezierpath不規則圖像裁剪
- 16. iPhone中的UIBezierPath的替代方案
- 17. 繪製餅圖與UIBezierPath
- 18. 填充UIBezierPath與平行線
- 19. 夾掩蔽與CAShapeLayer和UIBezierPath
- 20. 獲取媒體與AVDepthData沒有iPhone 7+
- 21. 與iPhone同步後獲取iTunes通知
- 22. 路徑轉換後可以獲取UIBezierPath當前控制點嗎?
- 23. 獲取圖像中的像素值
- 24. iOS獲取UIBezierPath和圖像之間的交叉點像素
- 25. iPhone與Google Buzz的集成
- 26. UIBezierPath到UIImage
- 27. 獲取MongoDB的集合與節點
- 28. 獲取元素在bash與集-u
- 29. 獲取非唯一記錄與續集
- 30. C#與使用獲取集合卡住
問題是比較不清楚。你需要得到的是什麼? 「點x」和「點y」是什麼意思?你在談論一個或兩個不同點的x和y座標嗎?請描述你的問題。 – nullp01nter
是的,我的意思是我怎麼能得到我的路徑在x座標y座標,像http://imageshack.us/photo/my-images/21/iossimulatorscreenshoto.png/ –