用C 的GNUPLOT绘制几何图
Plotting geometric graph with gnuplot from C++
我在C 中编写了一个代码,鉴于节点的坐标(彼此足够接近的点已连接),该代码找到了几何图的边缘。我现在想绘制图形,将链接的坐标管输送到GNUPLOT。看起来这样:
FILE *pipe = popen("gnuplot -persist", "w");
fprintf(pipe, "n");
fprintf(pipe, "set polarn");
fprintf(pipe, "plot '-' with linespoints n");
现在每次找到链接时(使用广度优先搜索算法),我做
fprintf(pipe, "%g %gn", RC[j].angle,RC[j].radius);
fprintf(pipe, "%g %gn", RC[start[ptr]].angle,RC[start[ptr]].radius);
fprintf(pipe, "%g %gn");
,搜索算法完成后,我以
结尾fprintf(pipe, "en");
fflush(pipe);
fclose(pipe);
但是,这不会打印我期望的几何图(远距离删除的点已连接)。如果我使用此过程将数据写入文件
outfile << RC[j].angle << ", " << RC[j].radius << endl;
outfile << RC[start[ptr]].angle << ", " << RC[start[ptr]].radius << endl;
outfile << " " << endl;
我确实得到了我想要的图。管道怎么了?
来自您的 std::ostream
和 fprintf
版本,我可以看出差异很明显:您忘记了comas(,) fprintf
版本中的空行:
fprintf(pipe, "%g, %gn", RC[j].angle, RC[j].radius);
fprintf(pipe, "%g, %gn", RC[start[ptr]].angle, RC[start[ptr]].radius);
fprintf(pipe, " n");
作为替代方案,我建议使用C 类代替旧C函数(未经测试):
class Pipe : public std::ofstream // in most cases this is bad, but ok here
{
public:
Pipe( FILE* pf ) : _pg(pf) {}
~Pipe() { pclose(pf); }
// copy-ctr(), op=(), ...
private:
FILE _pf;
};
Pipe gnuplot(popen("gnuplot -persist", "w"));
gnuplot << "n"
<< "set polarn"
<< "plot '-' with linespointsn";
for (...)
{
gnuplot << RC[j].angle << ", " << RC[j].radius << "n";
gnuplot << RC[start[ptr]].angle << ", " << RC[start[ptr]].radius << "n";
gnuplot << " " << std::endl;
}
相关文章:
- 如何在快板的屏幕中显示子位图的绘制?
- 图层不会绘制另一个图层
- 将抗锯齿基元绘制到位图 Allegro 5
- 尝试绘制矩形(位图)
- 我想在QT中实时绘制ADC图
- FreeGlut网格图未完全以特定值绘制
- 用C 的GNUPLOT绘制几何图
- 如何在 tty 上绘制折线图
- 使用图形可视化绘制自定义 BGL 图
- 使用C 绘制Linux并创建位图
- C++如何使用WTL绘制折线图
- 如何将 Qwt 图绘制到图像中
- 使用c++、linux绘制矢量图
- 如何在Qt中绘制和编辑折线图
- Allegro 5如何绘制缩放位图区域
- FLTK 绘制像素图给出段错误
- 另一个从剪贴板线程绘制位图
- 直接2D 加载和绘制位图
- 将用于绘制为位图的像素格式更改
- 是否可以将Windows位图绘制到cairo表面