回答
這是我使用的代碼:
float distanceFromPx2toP3 = 1300.0;
float mag = sqrt(pow((px2.x - px1.x),2) + pow((px2.y - px1.y),2));
float P3x = px2.x + distanceFromPx2toP3 * (px2.x - px1.x)/mag;
float P3y = px2.y + distanceFromPx2toP3 * (px2.y - px1.y)/mag;
CGPoint P3 = CGPointMake(P3x, P3y);
假設我有兩點pointA和pointB。由兩個點米形成的線的斜率是:
static CGFloat calculateSlope(CGPoint pointA, CGPoint pointB) {
CGFloat m = (pointB.y - pointA.y)/(pointB.x - pointA.x);
return m;
}
第三點pointC從點A上的線的距離d由下式給出:
static CGPoint calculatePointOnLine(
CGPoint pointA, CGPoint pointB, CGFloat d, BOOL startAtB) {
CGFloat m = calculateSlope(pointA, pointB);
CGFloat dX = pointB.x - pointA.x;
CGFloat dY = pointB.y - pointA.y;
CGFloat signDX = dX/fabsf(dX);
CGFloat signDY = dY/fabsf(dY);
CGFloat dSquared = d * d;
CGFloat mSquared = m * m;
// We know pointC is distance d from pointA,
// and that pointA and pointC are on the
// same line
// dXSquared + dYSquared = dSquared
// m = dY/dX
// dY = m * dX
// dXSquared + mSquared * dXSquared = dSquared
// dXSquared * (1 + mSquared) = dSquared
// dXSquared = dSquared/(1 + mSquared)
// Handle a vertical line, dX == 0, and a horizontal line, dY == 0
if (dX != 0 && dY != 0) {
// Account for the sign of dX
dX = signDX * sqrtf(dSquared/(1 + mSquared));
// Account for the sign of dY
dY = signDY * m * dX;
}
// Handle a vertical line, dX == 0
if (dX == 0 && dY != 0) {
dY = signDY * d;
}
// Handle a horizontal line, dY == 0
if (dY == 0 && dX != 0) {
dX = signDX * d;
}
CGPoint startingPoint = pointA;
if (startAtB) {
startingPoint = pointB;
}
CGPoint pointC = CGMakePoint(startingPoint.x + dX,
startingPoint.y + dY);
return pointC;
}
pointC現在將總是位於一個沿點A的線 從點A到點B的方向的距離d。通過startAtB讓pointC 位於沿着從點B的線的距離d,從 pointA到pointB的方向。
交換piintA和pointB的在調用calculatPointOnLine 的爲了計算pointC其位於距離d沿從 PointB線,在從pointB至點A的方向。
您可以使用這兩個函數來計算線上的第三個點。 感謝您接受這個答案,如果這可以幫助你。
感謝您的回答! 我想比較我和你的代碼... ' - (float)calculateAngle:(float)x1 y1:(float)y1 x2:(float)x2 y2:(float)y2 { float x = x2-x1; float y = y2-y1; (atan2(-x,-y)*(180/M_PI)); 返回角度; }' 這將返回第三點我有這樣的事情的角度正確 ,但看起來像它不工作 '浮MAG =開方((px2.x - px1.x)* 2 +(px2.y - px1.y)* 2); float P3x = px2.x + 100 *(px2.x - px1.x)/ mag; float P3y = px2.y + 100 *(px2.y - px1.y)/ mag;' –
我確實嘗試了您的代碼,但它只是以積極的方式工作。任何想法該怎麼做,以便此代碼工作360? –
該功能現在應考慮負面的角度和負面。它也將處理水平線和垂直線 –
- 1. 如何找到一個點與其他兩點的距離?
- 2. 如何找到兩個其他點之間的地理點
- 3. AS3/Java - 通過了解其他兩點和線段長度找出三角點
- 4. 從其他角度
- 5. Xpath,找到兩個其他節點之間的節點
- 6. 如何動態添加類到其他元素點擊角度
- 7. 如何找到兩個其他列表中的每個元素?
- 8. 使用兩個差值旋轉其他兩個歐拉角
- 9. 1點和其他任何其他
- 10. 找到給定其他2個頂點和角度的第三個頂點座標
- 11. 我們如何找到啓動其他應用的信息?
- 12. 尋找一個頂點,其移除將斷開兩個其他
- 13. 如何解決功能和角度調用其他功能
- 14. 讓其他兩個div的高度爲
- 15. 如何獲得購物車價值,當我們切換到其他角度js
- 16. 使用逗號和點數來計算其他值的角度方式
- 17. 谷歌,Facebook和其他網站如何縮小他們的HTML?
- 18. 獲得的2個三角形有他們的角度比例
- 19. 移動到其他節點XML節點,如果他們的一些節點的值相等(使用XSLT)
- 20. 使用html和css覆蓋兩個圖像,如果我嘗試任何其他覆蓋他們是衝突?
- 21. 如果和其他兩個條件PHP
- 22. 與其他兩個
- 23. VBA找到兩個其他人之間的任何值
- 24. 如何通過id和其他鍵過濾角度結果?
- 25. Yii的 - PHP - 如何解析子目錄到模塊(和他們的其他PARAMS)
- 26. 測試使用其他服務的角度服務使用$ http
- 27. P2P應用程序如何找到其他節點?
- 28. 查找連接到其他節點
- 29. 找到除數和他們的除數等以一定深度
- 30. 如何將ViewBag發送到其他RenderPage使用其他RenderPage
你的回答幫了我很多......謝謝 –