- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种语言或现有语言的包,它适合指定和绘制几何图。
例如,我想画一个六边形网格,其上叠加有双三角形网格。现在,我可以坐下来,手动计算出三角函数,并提出一些可以显示此类网格的 Postscript 或 SVG。但我想知道是否有任何语言或软件包可以帮助我解决这个问题;这使得指定六边形网格、找到中心并在其上绘制三角形网格变得容易。
最简单的方法是什么?
代码示例,显示创建这种几何指定的图表是多么容易,我们将不胜感激。特别是,请演示绘制六边形网格是多么容易;虽然我可以用任何语言通过手工绘制所有线条来做到这一点,但我对使这种几何图变得简单明了的语言或包感兴趣。
由于这个问题已经得到解答,但答案比我想要的更复杂,我将向那些能够以任何现有语言并使用任何现有语言生成最短和最简单代码的人提供赏金包,用于绘制六边形网格,其上叠加有双三角形网格;双三角网格是将每个六边形的中心连接到每个相邻六边形的中心时得到的三角网格。请参阅Antal S-Z's回答例如;他的例子可以完成这项工作,但我一直在寻找一种可以使这个问题变得更容易的语言。您可以生成一个大致矩形的网格,如他的示例所示(奇数行对齐,偶数行对齐),也可以生成 Hex 样式的网格。板(每行向右移动半个六角形,形成菱形);两者都可以接受。
程序可以以函数或子例程的形式获取输入,该语言采用多个行和多个列,或者获取在命令行上传递的指示行和列的输入。它应该以任何标准和常见图形格式生成输出,例如 Postscript、PDF、SVG、PNG 或 PNM ;输出应包含六角网格和三角形网格,并采用某种对比色、线宽或线条样式,以使图表清晰。
我正在寻找最短和最简单的答案,作为找到最适合描述此类图表的语言或包的方法;赏金将用于解决问题的最短程序。这不是代码高尔夫,所以我不会按字符数或代码行数进行计数。如果没有明显的最短答案,那么我将根据 token 数进行衡量;用你的语言需要多少个标记来表达这个问题?因此,可读的常量和变量名、使用库函数、注释、空格等都可以,因为它们不会增加标记计数。它仍然不是一个完美的度量(Lisps 将有更多的标记,因为你需要更多的括号来分隔算术表达式,而且我确信如果你过度优化这个度量,你仍然可以生成一些不可读的代码),但它是关于代码复杂程度的粗略指南。
因此,对于赏金来说,挑战是创建最短的程序,绘制一个六边形网格及其叠加的三角形网格。请发布您的代码、您使用过的语言和任何包的链接、粗略的 token 计数(如果可能)以及示例输出图像。现有的答案是你必须超越的标准才能获得资格;它可以完成工作,但我想要更短、更简单的东西。
为了给我足够的时间查看答案并授予赏金,所有答案必须在赏金截止日期前至少 24 小时提交。我可能会也可能不会考虑在截止日期前 24 小时内提交的任何答案。
最佳答案
我还想推荐 PGF/TikZ,但需要注意的是它是用 TeX 编写的。如果您不习惯进行 TeX 编程,可能会有点头疼,因为有一些……特性。 (例如,处理杂散空间可能是一次冒险。)不过,如果您愿意进行 TeX 编程,我强烈推荐您这样做;即使我不使用 TeX,我也经常使用它来绘制图形。此外,its manual绝对令人惊叹,并且 TeXample gallery有大量很好的例子。
绘制六角网格并对其进行三角测量的示例代码如下。我承认它很长,但我认为它确实没有那么糟糕。
\documentclass{article}
\usepackage{tikz}
\usepackage{ifthen}
\usetikzlibrary{calc}
\usetikzlibrary{shapes.geometric}
\tikzset{hexagon/.style={regular polygon, regular polygon sides = 6}}
\newif\ifHexgridTriangulate
\newif\ifHexgridStartShifted
\pgfqkeys{/hexgrid}
{ name/.store in = \HexgridName
, xpos/.store in = \HexgridX
, ypos/.store in = \HexgridY
, rows/.store in = \HexgridRows
, cols/.store in = \HexgridCols
, size/.code = {\pgfmathsetmacro{\HexDiameter}{#1}}
, triangulate/.is if = HexgridTriangulate
, start shifted/.is if = HexgridStartShifted }
\tikzset{ every hexgrid hex/.style 2 args = {draw}
, every hexgrid triangulator/.style = {}}
\newcommand{\hexgrid}[2][]{
\pgfqkeys{/hexgrid}{ name = hexgrid , size = 1cm
, xpos = 0 , ypos = 0
, triangulate = false
, start shifted = false
,#2 }
\ifHexgridStartShifted
\def\HexShiftModCheck{0}
\else
\def\HexShiftModCheck{1}
\fi
\begin{scope}[xshift=\HexgridX, yshift=\HexgridY,#1]
\pgfmathsetmacro{\HexRadius}{\HexDiameter/2}
\pgfmathsetmacro{\HexSide}{sqrt(3)*\HexRadius/2}
\pgfmathsetmacro{\HexWidth}{2*\HexSide}
\tikzset{every node/.style={hexagon, minimum size=\HexDiameter}}
\foreach \row in {1,...,\HexgridRows} {
\foreach \col in {1,...,\HexgridCols} {
\pgfmathsetmacro{\HexX}%
{\HexWidth*( (\col-1)
+ (mod(\row,2) == \HexShiftModCheck
? 0 : .5))}
\pgfmathsetmacro{\HexY}%
{-(\HexRadius + \HexSide/2 + 2*\pgflinewidth)*(\row-1)}
\node [hexagon, rotate=90, every hexgrid hex = {\row}{\col}]
(\HexgridName-\row-\col)
at (\HexX pt ,\HexY pt)
{} ;
}
}
\ifHexgridTriangulate
\begin{scope}[every path/.style={every hexgrid triangulator}]
\foreach \row in {1,...,\HexgridRows} {
\foreach \col in {1,...,\HexgridCols} {
% Using \pgfmathsetmacro always includes a decimal point, which
% breaks \ifnum.
\pgfmathparse{int(\row-1)}\let\prow\pgfmathresult
\pgfmathparse{int(\col-1)}\let\pcol\pgfmathresult
\ifnum\prow>0
\draw (\HexgridName-\prow-\col.center)
-- (\HexgridName-\row-\col.center) ;
\fi
\ifnum\pcol>0
\draw (\HexgridName-\row-\pcol.center)
-- (\HexgridName-\row-\col.center) ;
\fi
\ifnum\prow>0\ifnum\pcol>0
\pgfmathparse{mod(\prow,2) == \HexShiftModCheck}
\ifnum\pgfmathresult=1
\draw (\HexgridName-\prow-\col.center)
-- (\HexgridName-\row-\pcol.center) ;
\else
\draw (\HexgridName-\prow-\pcol.center)
-- (\HexgridName-\row-\col.center) ;
\fi
\fi\fi
}
}
\end{scope}
\fi
\end{scope}
}
\begin{document}
\begin{center}\begin{tikzpicture}
% Simplest case
\hexgrid{rows = 5, cols = 5}
% Every possible option at once
\hexgrid[ every hexgrid hex/.style 2 args = {ultra thick, draw=blue}
, every hexgrid triangulator/.style = {color=black!75} ]
{ name = thg , size = 1.5cm
, xpos = 0 , ypos = -5cm
, rows = 5 , cols = 5
, triangulate
, start shifted}
% Mark the center of that grid, just because we can.
\filldraw [red] (thg-3-3) circle (2pt) ;
\end{tikzpicture}\end{center}
\end{document}
\newcommand{\hexgrid}
之前的代码仅包含所需的包并设置关键字参数:name
设置用于引用六边形的名称, size
设置每个六边形的角到角大小,xpos
和 ypos
定位整个网格的左上角, rows
和 cols
确定六边形的数量,triangulate
选项允许您选择对网格进行三角测量,startshift
选项第一行开始缩进,而不是第二行。我们还允许用户在 \hexgrid
的第一个可选参数中传递样式命令; 每个 hexgrid hex/.style 2 args
将允许他们设置各个六边形的样式(如果需要,甚至可以查询该六边形的位置),以及每个 hexgrid triangulator/.style
> 将允许他们设置三角测量线的样式。
跳过一点,我们来到 \pgfsetmacro
行;六边形的直径是指定的,因此我们必须计算半径、边长,然后计算边到边的宽度。以下两个 \foreach
循环是绘图代码的核心,希望应该非常清晰。请注意,在确定垂直放置时,我们必须考虑线条的粗细。之后是一个更长的代码块,位于 \ifHexgridTriangulate
和 \fi
之间;如果需要的话,它负责对网格进行三角测量。
最后,我们看看它是什么样子的:
关于language-agnostic - 用于绘制几何图的语言或包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4005042/
通过终端,您可以使用命令 - “SetFile -a B 文件名” 以编程方式,我认为我应该通过[[NSFileManager defaultManager] createDirectoryAtPat
嗨,正在尝试书中的一些示例:Practical Graph mining with R对于子图挖掘: library(subgraphMining) library(igraph) graph1 =
代码中的相同问题: class Foo { int getIntProperty () { ... } CustomObject getObjectProperty () { ... }
所以这可能是一个愚蠢的问题,但它已经困扰我一段时间了。 使用 React,我创建了两个组件(Buttons.js 和 Message.js),每个组件都有一个导出。但是,现在我希望将这两个组件用作 n
从今天早上开始,我发现我无法再从某个范围安装任何 NPM 包(或任何具有依赖项的包)。例如,如果我输入 npm i webpack 我会收到以下错误... npm ERR! code E401 npm
我在这里搜索过,Angular 2, @ngtools/webpack, AOT ,但对我不起作用。我运行了 npm install 命令。我正在做的是创建一个新的 Angular 2 项目。当我运行
情况: 我有一个 Swift 包,将其命名为 lib。 lib 位于其自己的存储库中。在lib的仓库中,有一堆本地包;也就是说,这些包是在 lib 中定义的,使用本地路径依赖格式 .package(p
我想在工作中学习和使用nodejs,但是在使用 de npm 命令安装模块/包时遇到网络问题。我是否可以使用我的家用计算机构建完整的 Node js 包,然后将其安装在另一台计算机(我的工作场所计算机
我需要将一些 .tar.bz2 格式的非 Python 包转换为 Anaconda/miniConda .egg 文件并安装它们。为此,我需要一个适用于 Windows 的 bld.bat 文件。互联
我需要共享库文件 libthrift-0.9.3.so 作为其他包的依赖项。我在构建 thrift-0.9.3 包时看到编译问题(我确实从 https://thrift.apache.org/down
我尝试在 R 版本 3.5.0 中安装“arcgisbinding”包。但是我失败了,得到以下错误和警告。 Installing package into ‘C:/Users/Lenovo/Docum
我尝试在 R 版本 3.5.0 中安装“arcgisbinding”包。但是我失败了,得到以下错误和警告。 Installing package into ‘C:/Users/Lenovo/Docum
我试图在 flutter 中测试这个应用程序,但我无法运行该应用程序,因为出现此错误“名称‘Page’在库‘package:burn_off/widgets/page.dart’和‘package’中
试图理解和学习如何编写包...用我一直使用的东西进行测试,记录... 您能帮我理解为什么“日志”变量不起作用...并且屏幕上没有日志记录吗? 谢谢! 主要文件: #!/opt/local/bin/py
我尝试运行此使用 Google 云的代码。 import signal import sys from google.cloud import language, exceptions # creat
我想知道是否有人找到了一个很好的 R 包来分析眼动追踪数据? 我遇到了 eyetrackR,但据我所知,没有可用的英文支持文档: http://read.psych.uni-potsdam.de/pm
我正在 R 上制作一个包。我有两个函数共享一个变量(全局)。 如何将其导入到包中? 例如, m<-0 f<-function() { m <- m+1 } g<-function() { m <- m
我用 C 为 Lua 编写了很多模块。每个模块都包含一个 Lua 用户数据类型,我像这样加载和使用它们: A = require("A") B = require("B") a = A.new(3,{
我正在尝试在 R 中的 Ubuntu 上安装 xlsx 包,以便使用允许在 R 中插入链接然后将它们导出到 Excel 的功能。 话虽如此,我根本无法安装该软件包。 显然它必须与 rJava 一起使用
我想在 Haskell 中做一些蒙特卡洛分析。我希望能够编写这样的代码: do n <- poisson lambda xs <- replicateM n $ normal mu sigma
我是一名优秀的程序员,十分优秀!