當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Processing bezierTangent()用法及代碼示例


Processing, bezierTangent()用法介紹。

用法

  • bezierTangent(a, b, c, d, t)

參數

  • a (float) 曲線上第一個點的坐標
  • b (float) 第一個控製點坐標
  • c (float) 第二控製點坐標
  • d (float) 曲線上第二點的坐標
  • t (float) 0 到 1 之間的值

返回

  • float

說明

計算貝塞爾曲線上一點的切線。維基百科上有一個很好的切線定義。

例子

size(400,400);
noFill();
bezier(340, 80, 40, 40, 360, 360, 60, 320);

int steps = 6;
fill(255);
for (int i = 0; i <= steps; i++) {
  float t = i / float(steps);
  // Get the location of the point
  float x = bezierPoint(340, 40, 360, 60, t);
  float y = bezierPoint(80, 40, 360, 320, t);
  // Get the tangent points
  float tx = bezierTangent(340, 40, 360, 60, t);
  float ty = bezierTangent(80, 40, 360, 320, t);
  // Calculate an angle from the tangent points
  float a = atan2(ty, tx);
  a += PI;
  stroke(255, 102, 0);
  line(x, y, cos(a)*120 + x, sin(a)*120 + y);
  // The following line of code makes a line 
  // inverse of the above line
  //line(x, y, cos(a)*-30 + x, sin(a)*-30 + y);
  stroke(0);
  ellipse(x, y, 10, 10);
}
Image output for example 1
size(400,400);

noFill();
bezier(340, 80, 40, 40, 360, 360, 60, 320);
stroke(255, 102, 0);
int steps = 16;
for (int i = 0; i <= steps; i++) {
  float t = i / float(steps);
  float x = bezierPoint(340, 40, 360, 60, t);
  float y = bezierPoint(80, 40, 360, 320, t);
  float tx = bezierTangent(340, 40, 360, 60, t);
  float ty = bezierTangent(80, 40, 360, 320, t);
  float a = atan2(ty, tx);
  a -= HALF_PI;
  line(x, y, cos(a)*32 + x, sin(a)*32 + y);
}
Image output for example 2

相關用法


注:本文由純淨天空篩選整理自processing.org大神的英文原創作品 bezierTangent()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。