バイオビジネス 情報システム論 第11回目 組織と情報システム
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
BB情報システム論 第10回目 ネットビジネスと情報システム2
バイオビジネス 情報システム論 第10回目 ネットビジネスと情報システム2
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
BB情報システム論 第9回目 ネットビジネスと情報システム
バイオビジネス 情報システム論 第9回目 ネットビジネスと情報システム
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
BB情報システム論 第8回目 ビジネス戦略と情報システム2
バイオビジネス 情報システム論 第8回目 ビジネス戦略と情報システム2
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
Simple basic spiral code implementation 2 with tolerance 0.1
Wednesday, November 6, 2019
Simple basic spiral code implementation 2 with tolerance 0.1
This is the sequel of the previous code implementation of spiral, that time I made a very simple archimedean spiral with the same step over. But sometime, we want more than a step over, a distance between each point of a spiral (tolerance).
Here is my code implementation in c.
After running the code, it will print out the angle (radian), angle (degree), r of each point(interpreted as 1/curvature), x, y coordinate of each point, and the distance of each point.
The plotted spiral from the code in excel is as shown below.
Pretty simple right!
spiral 2
This is the sequel of the previous code implementation of spiral, that time I made a very simple archimedean spiral with the same step over. But sometime, we want more than a step over, a distance between each point of a spiral (tolerance).
Here is my code implementation in c.
/**********************************************************************
*
*
* @par Copyright(C)
* 2018 Tokyo University of Agriculture, Saville Lab.
* All rights reserved.
*
* @par History:
* - 2018/07/15 Saville Ramadhona
* - first code.
*
***********************************************************************/
/*
* Program to make spiral curve and put the point on spiral
* based on tollerance (point distance).
* Not based on parameter of spiral curve.
* eg. When tollerance is o.1, distance between adjacent points on spiral
* must not exceed the tollerance.
*
*/
#include<stdio.h>
#include<math.h>
#define M_PI 3.14159265358979323846
/**
* function to evaluate/compute point on spiral
*
* @param[in] param spiral parameter
* @param[in] theta angle in computed point (radians)
* @param[out] pt array coordinate of computed point on spiral (x,y)
* @return radius of center point of spiral to computed point
*/
double evalSpiralpt(double param, double theta, double pt[2])
{
double r = param*theta;
pt[0] = r * cos(theta);
pt[1] = r * sin(theta);
return r;
}
/**
* function to check distance square between adjacent points
* we do not use sqrt to make computation faster
*
* @param[in] point newly computed point on spiral
* @param[in] prevpoint previously computed point on spiral
* @return distance square obetween adjacent points
*/
double checkDistpt2(double point[2], double prevpoint[2])
{
return (point[0]-prevpoint[0])*(point[0]-prevpoint[0])
+ (point[1]-prevpoint[1])*(point[1]-prevpoint[1]);
}
//spiral definition r = a + bθ
void main()
{
//remove file if exist
int status;
status = remove("C:\\Users\\BA17655\\Documents\\spiral.csv");
//prepare csv file to see the computation result
FILE *fp;
fp = fopen("C:\\Users\\BA17655\\Documents\\spiral.csv", "a");
fprintf(fp, "rad, theta, r, x, y, d\n");
double pi_2 = 2* M_PI;
int numTurns = 5; //automatically determine by detecting outer edge, later!
double stepover = 0.1; //tool path stepover (USER INPUT)
double distanceBetweenTurns = stepover * (1 / (pi_2)); //b
double theta = 0.0; //starting angle
double offset = 0.0; //a (offset of starting point)
/*
double pointsPerTurn = 20; //to be modified
for(int i=0; i<(pointsPerTurn*numTurns+1); i++)
{
double r = offset + (distanceBetweenTurns*theta);
double point[2];
point[0] = r * cos(theta);
point[1] = r * sin(theta);
printf("%f %f %f %f \n", theta*(180.0/M_PI), r, point[0], point[1]);
theta += pi_2 / pointsPerTurn;
}
*/
double dist_thres2 = 0.01; //distance threshold(control point tollerance - USER INPUT)
int cnt = 0;
double point[2]; //x, y coordinate control point on spiral
double prevpoint[2];
double prevtheta;
double degree;
double sizelimit = numTurns * 360.0; //to sizelimit the size of spiral
do
{
//evaluate point in spiral
double r = evalSpiralpt(distanceBetweenTurns, theta, point);
if( cnt < 1 )
{
fprintf(fp, "%f, %f, %f, %f, %f\n", theta, theta*(180.0/M_PI), r, point[0], point[1]);
theta += pi_2 * dist_thres2;
}
if( cnt > 0 )
{
//check distance of control point
double dist2 = checkDistpt2(point, prevpoint);
//check if point distance exceed tolerance
if( dist2 > dist_thres2 )
{ //if exeec tollerance, compute new control point
do
{
//make the new point to be located in the middle of previous and current point
theta = (theta + prevtheta) * 0.5;
r = evalSpiralpt(distanceBetweenTurns, theta, point);
dist2 = checkDistpt2(point, prevpoint);
//when above is not enough, do it one more time!
if( dist2 > dist_thres2 )
{
theta = (theta + prevtheta) * 0.5;
r = evalSpiralpt(distanceBetweenTurns, theta, point);
dist2 = checkDistpt2(point, prevpoint);
}
}while( dist2 > dist_thres2 ); //when point distance lies under the tollerance, exit loop
}
fprintf(fp, "%f, %f, %f, %f, %f, %f\n", theta, theta*(180.0/M_PI), r, point[0], point[1], dist2);
prevtheta = theta;
theta += pi_2 * dist_thres2;
}
cnt++;
prevpoint[0] = point[0];
prevpoint[1] = point[1];
degree = theta*(180.0/M_PI);
}while( degree <= sizelimit );
}
After running the code, it will print out the angle (radian), angle (degree), r of each point(interpreted as 1/curvature), x, y coordinate of each point, and the distance of each point.
The plotted spiral from the code in excel is as shown below.
Pretty simple right!
spiral 2
BB 情報システム論 第6回目 ビジネス戦略と情報システム1
バイオビジネス 情報システム論 第6回目 ビジネス戦略と情報システム1
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
BB 情報システム論 第5回目 生活基盤としての情報システム
バイオビジネス 情報システム論 第5回目 生活基盤としての情報システム
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
BB 情報システム論 第4回目 社会基盤としての情報システム
バイオビジネス 情報システム論 第4回目 社会基盤としての情報システム
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
BB 情報システム論 第3回目 情報システムとコンピュータ
バイオビジネス 情報システム論 第3回目 情報システムとコンピュータ
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
PDFスライド
東京農業大学
国際バイオビジネス学科
サフィル ラマドナ
Subscribe to:
Posts (Atom)