我想生成一個n點的數組,它們彼此等距,並且躺在一個C中的圓上。基本上,我需要能夠傳遞一個函數我想要生成的點的數量並獲取點數組。如何生成一組距離彼此等距並位於一個圓上的點
回答
這是一個很長的時間,因爲我已經做了C/C++,所以我已經在這個多刺,看看我是如何得到的呢,但這裏的一些代碼,將計算點爲你。 (這是一個VS2010控制檯應用程序)
// CirclePoints.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "math.h"
int _tmain()
{
int points = 8;
double radius = 100;
double step = ((3.14159265 * 2)/points);
double x, y, current = 0;
for (int i = 0; i < points; i++)
{
x = sin(current) * radius;
y = cos(current) * radius;
printf("point: %d x:%lf y:%lf\n", i, x, y);
current += step;
}
return 0;
}
嘗試是這樣的:
void make_circle(float *output, size_t num, float radius)
{
size_t i;
for(i = 0; i < num; i++)
{
const float angle = 2 * M_PI * i/num;
*output++ = radius * cos(angle);
*output++ = radius * sin(angle);
}
}
這是未經測試,有可能是關閉的情況,一個隱藏在角度步長計算,但它應該接近。
這是假設我理解正確的問題,當然。
UPDATE:重新計算角度計算不增加,以減少重複加法造成的浮點精度損失。
你必須用C語言來解決這個:
在XY笛卡爾座標系,具有中心的圓座標(a,b)和半徑r爲集合中的所有點(X,Y),使得
(X - A)^ 2 +(Y - b)^ 2 = R^2
看起來像標籤作業,這就是爲什麼我不想寫代碼.... – 2011-04-20 12:59:49
這就是爲什麼我寫了奇特的解決方案和挑戰的OP解釋給他們的教授,如果他們逐字複製它; ;-) – 2011-04-20 13:10:03
這裏的一個解決方案,有些優化,未經測試。錯誤可能會累積,但使用double
而不是float
可能會超過它,除非有極大值n
。
void make_circle(double *dest, size_t n, double r)
{
double x0 = cos(2*M_PI/n), y0 = sin(2*M_PI/n), x=x0, y=y0, tmp;
for (;;) {
*dest++ = r*x;
*dest++ = r*y;
if (!--n) break;
tmp = x*x0 - y*y0;
y = x*y0 + y*x0;
x = tmp;
}
}
要真正挑剔,對於大n,你將失去一點準確性,通過更新x和y這種方式,因爲x0將接近於1.通過使用d0 = cos(2pi/n)-1 = -2 * sin (pi/n)* sin(pi/n),然後更新爲tmp = x * d0-y * y0; y + = x * d0 + y * x0; x + = tmp; – dmuir 2011-04-21 10:57:36
爲了公平起見,我說你會爲大'n'積累錯誤,但是感謝你的改進。 :-) – 2011-04-21 12:16:40
這是一個JavaScript實現,它也需要一個可選中心點。
function circlePoints (radius, numPoints, centerX, centerY) {
centerX = centerX || 0;
centerY = centerY || 0;
var
step = (Math.PI * 2)/numPoints,
current = 0,
i = 0,
results = [],
x, y;
for (; i < numPoints; i += 1) {
x = centerX + Math.sin(current) * radius;
y = centerY + Math.cos(current) * radius;
results.push([x,y]);
console.log('point %d @ x:%d, y:%d', i, x, y);
current += step;
}
return results;
}
嗨,歡迎來到Stack Overflow。雖然這應該是微不足道的轉化爲C,請在將來的答案中堅持標籤。這是一個C語言問題,應該給予C-答案。 – user13500 2014-03-04 02:01:39
- 1. 在距離彼此最小距離的圓上隨機產生數量的GameObjects
- 2. 如何圓一個GeoDjango內置距離
- 3. 如何在javascript中生成彼此之間距離的隨機位置?
- 4. 如何將彼此距離內的所有3D點組合在一起
- 5. 從一個點等距離生成向量
- 6. 美國各州和城市距離彼此的距離
- 7. 如何以等距離彼此放置塊?
- 8. 距離某一點的線段距離上的點
- 9. 計算一個圓上8個等距點的像素座標
- 10. 定位一個圖像距離側面一定距離android
- 11. 如何計算距離另一點一定距離的點的緯度/經度?
- 12. 如何計算距離另一點一定距離的點的緯度?
- 13. 在Python列表中查找彼此相距一定距離內的數字
- 14. NetLogo創建彼此間距離相距不遠的海龜
- 15. 在PostgreSQL中計算點和圓之間的距離,用於圓半徑和距離的單位是什麼?
- 16. 找到一個點,使距離一個有限區域內的一組點的總距離最大
- 17. 根據歐幾里得距離在圓周上創建等距點:MATLAB
- 18. 找到彼此距離最大的點對
- 19. 距離總是等於零
- 20. 大圓距離C++
- 21. Bukkit:如何讓玩家距離到一個圓的邊緣?
- 22. AS3/Flash - 如何將字符彼此隔開一段規定的距離?
- 23. OpenGL找到一個點的距離
- 24. d3如何均衡距離中心圓周上的物體的距離
- 25. LibGDX - 如何在相距一定距離處產生物體?
- 26. 基於距離生成NetworkX子圖
- 27. 如何在一個點和一個方向形成的假想線上得到一個點x的距離
- 28. 在距離10處的圓圈內畫一個圓圈
- 29. 處理:線和圓的交點距離
- 30. 計算距離位置的距離 - iPhone
我選擇這個作爲接受的答案,因爲你向我展示瞭如何得到我和我的項目所需要的x和y點。我可以解釋一下數學嗎?我只有13歲,所以請儘量保持你的解釋儘可能簡單。 – 2011-05-07 23:43:26