ran*_*ano 6 java processing wolfram-mathematica image-processing
我正在寻找一种算法,它提供了一种生成结的图形表示的方法(2D或3D,但前者,最好是矢量图形).
在尝试自己设计一些东西之前,我想了解一些现有软件的存在,这些软件不仅可以代表它们(在内存中),还可以在一些图形表示中进行可视化(有许多).它可以是库的形式,也可以是简单的函数,甚至是伪代码算法,它试图指定如何在屏幕上正确绘制知识.
正如之前的链接所暗示的那样,在Wolfram Mathematica中有一个包,命名KnotTheory就是这样(以几乎完整的方式).但是,它不可移植,也不是免费软件和访问它的模块对我来说非常麻烦(在Java中免费实现,只是为了命名一种语言,但每种语言都很好,从可移植性和开放性的角度看是理想的) .
我已经看到许多软件可用(但大多数都是旧的,无法访问或可用).你有一些很好的分享指南吗?
更新:由于两个投票结束这个问题已经出现,我正在以更务实和明确的方式重述它:是否有算法绘制和生成结?已经实施了一些东西
更新2(用于重新打开) 图形表示可以是3D渲染对象或2D svg图形(我正在从中抽象出来,因为我期待编程语言为Processing(或相同的Mathematica本身),它为您提供绘制的基元屏幕上的曲线(样条曲线,贝塞尔曲线等)(然后将它们导出为栅格或矢量图形).算法应采用一个结参数化作为输入(即,如果我们谈论由它们的交叉属性描述的结,它们的值是什么需要),返回上面的一个图形表示(即使是2d空间中的一系列点).也就是说,任何参数化都很好,我的目的只是为了得到如何绘制结的内省,以获得一个算法,以特定的方式做到这一点,导致一个特定的表示,会很好(Mathematica的lib似乎能够在如此多的表示中绘制它).
像这样的东西吗?
void setup() {
size(300, 300, P3D);
}
void draw() {
background(36, 10, 28);
int f = frameCount%360;
translate(width/2, height/2);
if (frameCount >= 360 && frameCount <= 1080 )
rotateY(radians(f));
stroke(0);
drawKnot(40);
translate(knotX(f)*40, knotY(f)*40, knotZ(f)*40);
noStroke();
fill(180,50,145);
sphere(10);
}
void drawKnot(float sz) {
stroke(200);
for (int i = 0; i < 360; i++) {
point(knotX(i)*sz, knotY(i)*sz, knotZ(i)*sz);
}
}
float knotX(int n) {
return sin(radians(n)) + 2*sin(radians(n*2));
}
float knotY(int n) {
return cos(radians(n)) - 2*cos(radians(n*2));
}
float knotZ(int n) {
return sin(radians(n*3))*-1;
}
Run Code Online (Sandbox Code Playgroud)