這裏是我用兩個箭頭在兩端繪製線的方法,它向您顯示在一條線上繪製箭頭的數學。根據您的特定需求修改這些方法應該很容易。
-(void)drawDoubleArrowLineInContext:(CGContextRef)inContext fromPoint:(CGPoint)inFromPoint toPoint:(CGPoint)inToPoint {
CGContextSetLineWidth(inContext, 1.0);
CGContextSetStrokeColorWithColor(inContext, [UIColor blackColor].CGColor );
CGContextSetFillColorWithColor(inContext, [UIColor blackColor].CGColor);
CGContextBeginPath(inContext);
CGContextMoveToPoint(inContext, inFromPoint.x, inFromPoint.y);
CGContextAddLineToPoint(inContext, inToPoint.x, inToPoint.y);
CGContextClosePath(inContext);
CGContextDrawPath(inContext, kCGPathStroke);
[self drawArrowInContext:inContext atPoint:inFromPoint pointFrom:inToPoint];
[self drawArrowInContext:inContext atPoint:inToPoint pointFrom:inFromPoint];
}
-(void)drawArrowInContext:(CGContextRef)inContext atPoint:(CGPoint)inTipPoint pointFrom:(CGPoint)inFromPoint {
const CGFloat kArrowHeight = 15;
const CGFloat kArrowBaseHalfWidth = 5;
double arrowAngle = atan2((inFromPoint.y - inTipPoint.y), (inFromPoint.x - inTipPoint.x));
CGContextBeginPath(inContext);
CGContextMoveToPoint(inContext, inTipPoint.x, inTipPoint.y);
CGContextAddLineToPoint(inContext, (inTipPoint.x + kArrowHeight*cos(arrowAngle)) - kArrowBaseHalfWidth*sin(arrowAngle),
(inTipPoint.y + kArrowHeight*sin(arrowAngle)) + kArrowBaseHalfWidth*cos(arrowAngle));
CGContextAddLineToPoint(inContext, (inTipPoint.x + kArrowHeight*cos(arrowAngle)) + kArrowBaseHalfWidth*sin(arrowAngle),
(inTipPoint.y + kArrowHeight*sin(arrowAngle)) - kArrowBaseHalfWidth*cos(arrowAngle));
CGContextAddLineToPoint(inContext, inTipPoint.x, inTipPoint.y);
CGContextClosePath(inContext);
CGContextDrawPath(inContext, kCGPathFillStroke);
}
既然在你的問題的標題中你寫了「數學」,我建議你看看仿射變換,特別是在旋轉和翻譯?如果它們在您的編程環境中可用,並且您可以使用它們,則可以在不需要「原始」公式的情況下編寫代碼,但在更高的抽象級別上。 –
這是怎麼回事?你能描述你所包含的代碼是在製作什麼嗎?這和你期望的有什麼不同?照片將是最好的。編輯:剛纔注意到這個問題有多老 - 你仍然有這個問題嗎?如果你自己修復它,你應該發佈你做的答案並接受它。 – GeneralMike
你看過[這個答案](http://stackoverflow.com/a/13559449/77567)?這可能比你的方法更簡單。 –