我正在努力解决以下问题:
我得到n
点和半径,我必须将它们放在尽可能对称的圆上。
目前,我使用过这样的东西:
float theta = 360.0f / n;
int i = 0;
for (Word w : e.getValue()) {
double newX = Math.sin(theta * i) * RADIUS + I_OFFSET_X;
double newY = Math.cos(theta * i) * RADIUS + I_OFFSET_Y;
mxCell v2 = (mxCell) graph.insertVertex(parent, null, w.getValue(), newX, newY, OW_WIDTH, OW_HEIGHT,"shape=ellipse");
graph.insertEdge(parent, null, "", v1, v2);
i++;
}
其中n
是我的分数。
这适用于足够大的n,但对于n=3
例如,我得到类似的内容:
我真的希望有类似的东西:
(绘图技巧不好......)
所以基本上,尽可能对称的东西会很棒。
有关如何解决此问题的任何提示?
谢谢< 3
答案 0 :(得分:1)
感谢Jongware,答案非常明显。因为我正在处理Java,所有#include <algorithm>
#include <iostream>
#include <map>
int main()
{
std::map<int, std::string> a,b;
a[0] = "0";
a[1] = "1";
b[0] = "0";
std::cout << "b ⊆ a? " << std::includes(a.begin(), a.end(), b.begin(), b.end()) << " (will be 1)\n";
b[1] = "1";
std::cout << "b ⊆ a? " << std::includes(a.begin(), a.end(), b.begin(), b.end()) << " (will be 1)\n";
b[2] = "2";
std::cout << "b ⊆ a? " << std::includes(a.begin(), a.end(), b.begin(), b.end()) << " (will be 0)\n";
}
参数都应该是弧度。
修正:
sin/cos
像魅力一样工作