java - 按程序生成结(并将其可视化)

标签 java image-processing wolfram-mathematica processing

我正在寻找一种算法来生成 knots 的图形表示(2D 或 3D,但前者最好是 vector 图形)。

我看到了很多关于结理论的链接,范围从 punctual referencesgeneral information

在尝试自己从头开始设计一些东西之前,我想了解一些现有软件的存在,这些软件不仅可以让您代表它们(在内存中),还可以在它们的一些图形表示中可视化(有 many ) .它可以以库或简单函数的形式出现,甚至可以是试图指定如何在屏幕上正确绘制知识的伪代码算法。

正如前面的链接所暗示的,Wolfram Mathematica 中有一个名为 KnotTheory 的程序包可以执行此操作(以几乎完整的方式)。但是,它不是可移植的,也不是免费软件,访问它的模块对我来说非常麻烦(Java 中的免费实现,只是命名一种语言,但每种语言都很好,从可移植性和开放性的角度来看是理想的) .

我看到 many 软件可用(但 most of them 是旧软件,无法访问或使用)。 您有一些好的建议可以分享吗?

更新: 由于出现了两次结束该问题的投票,我将以一种更加务实和清晰的方式重申它:是否有绘制和生成结的算法?有什么东西已经实现了吗

更新 2(重新开放) 图形表示可以是 3D 渲染对象或 2D svg 图形(我从中抽象出来,因为我期待一种编程语言作为处理(或相同的 Mathematica 本身),它为您提供绘制曲线的基元(样条曲线,贝塞尔曲线,等)在屏幕上(然后将它们导出为光栅或 vector 图形)。 该算法应将一个结参数化作为输入(即,如果我们谈论由它们的交叉属性描述的结,则它们的值就是所需要的),返回上面的图形表示之一(即甚至是二维空间中的一系列点).也就是说,任何参数化都可以,我的目标只是反射(reflection)如何打结,以便获得一种以特定方式执行此操作的算法,从而产生特定的表示形式,这很好(Mathematica 的库似乎能够以如此多的表示形式绘制它)。

最佳答案

是这样的吗?

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;
}

关于java - 按程序生成结(并将其可视化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25443480/

相关文章:

wolfram-mathematica - Mathematica 中的特殊运算符定义

Java 对任意数字进行四舍五入

java - 许多 jbutton 具有相同的 onkeypress 功能

java - 为什么要为 HttpHead 方法取回 cookie?

java - 在 ImageJ 中实现 Sobel 过滤器

parsing - 将 Mathematica 移植到 Octave

java - Maven Exec 插件不在 Windows 上使用系统路径?

c++ - OpenCV 2.3 C++ 基础图像处理

ios - 如何使用 MPS (MetalPerformanceShaders) 制作 Flatten 滤镜?

wolfram-mathematica - 具有PlotMarkers的慢速ListPlot