以下面这组点为例:
p ={{1.34837, 0.86741}, {3.69674, 1.57346}, {1.07977, -0.60608}, {3.59698, -1.45794}, {2.01771,-0.92349}, {2.51764, 1.21895}, {1.63547, 0.09925}, {2.01779,0.17515}, {2.87027, 0.34438}}
----------
算法1.
AbsoluteTiming[Module[{}, S = {};
For[i = 1, i <= Length[p] - 2, i++,
For[j = i + 1, j <= Length[p] - 1, j++,
f[{x_, y_}] = Det[{p[[i]]~Join~{1}, p[[j]]~Join~{1}, {x, y, 1}}];
For[k = j + 1, k <= Length[p], k++,
If[Abs[f[p[[k]]]] < 10^(-4), AppendTo[S, {i, j, k}]]]]];
S /. Thread[{1, 2, 3, 4, 5, 6, 7, 8, 9} -> {"a", "b", "c", "d", "e",
"f", "g", "h", "i"}]]]
输出为
{0.0007876, {{"a", "b", "f"}, {"a", "d", "h"}, {"a", "e", "g"}, {"b",
"c", "h"}, {"b", "e", "i"}, {"c", "d", "e"}, {"c", "f", "g"}, {"d",
"f", "i"}, {"g", "h", "i"}}}
测试多次,实际用时0.0007~0.0008秒 |