s, each made from two Nurbs curves, each with different surface properties.
Curves A1 and A2 have 2 control points:
startpoint and endpoint
Curves B1 and B2 on the other hand were drawn with 6 control points each.
What's more, those point's aren't equally distanced from one another.
The lofts inherit the position of control points of the profile curves.
The distribution of control points in the loft direction is uniform.
So no suprise here:
You can think of Nurbs curves as rubber bands and of Nurbs surfaces as rubber sheets. The areas with less control points would correspond to streched rubber.
Now lets imagine you take an A4 piece of rubber, lay in on a table and draw equally distanced lines on it. When you strech it ununiformally - the distances won't stay equal anymore.
Returning to your first post:
The Divide Surface component operates on u,v values which you can imagine as dimensions of the rubber sheet in relaxed state.
So the result you got was indeed an equaly divided surface, only in the so called "parameter space" of the surface, which doesn't always correspond to the xyz space.
There are methods to divide curves and surfaces in equal distances in the way you want it. For starters check out the Evaluate Lenght component.
I think that's enough teory for today. Have fun!
JJ…
st for the quality of the mesh.
Actually, convergence is much more than simply having low residuals. You can have a wrong solution with very low residuals. Usually, it is a combined process of both run time information on residuals and having an idea or expectation of what the simulation results should be. Another way of assessing convergence is if the residual values have been stable (within a very small limit, e.g. 1E-5) for more than a certain number of iterations (e.g. 1000). We are planning to provide run-time residual plots in Butterfly, hopefully soon. These plots can help keeping an eye on the solution.
You could try as a test if you want to switch to a blend of first and second order (by swapping upwind with linearUpwind in the fvSchemes)
.
Concerning mesh quality there are a number of ways, some of which are a bit advanced for this post and for BF's current capabilities. The best way to start is by refining the background mesh (i.e. the blockMesh). You can do that by assigning more cells to the x, y and z directions in the blockMesh component. However, make sure you increase the max global cells. I would suggest you monitor the output of the blockMesh in order to know the total number of cells there. Your max global cells has to be higher than that for SHM to even work. I'd suggest 2x to start with. Ofc all that requires a bit of trial and error depending on the case at hand.
Hope this helps!
Kind regards,
Theodore.…
nnot calculate (too many digits).
Or you want just to fill that space with random configuration and find some good for you?
Here's my first thoughts:
Again, as some other cases, iterative process.
(Conway's game of life, a cellular_automata-like process (?)... Install anemone.)
I would create 3 grids:
1 - grid of 100 values, cell's center points
these values can have more integer values like 0=free 1=occuped
2 - grid of 81 values, grid vertex points (excludig perimeter)
these values are where the center of 2x2 cells could be. 0=possible location 1=not possible location
3 - "grid" of 180 values, grid segment center, where 1x2 center could be
again 0 and 1
Then it's needed a "topology" between those 3 grids:
At each iteration those values updates each other by basing on placed cells and adjacent values.
At each iteration a new cell (random from A or B) is placed in a random possible location.
This is just my madness, and maybe I'm already far away from a result.
For sure a fasterst, simpler, smarter solution exists.…
rsity building with 81 thermal zones. I wanted to use this model on my master thesis, but I am afraid I won't be able. So I would really appreciate some help.
The purpose was to set different insulation thicknesses and glazing types depending on the orientation. Therefore I created every zone by using "createHBsrfs" components. At the same time different zones would have different "building programs".
I created all the zones, I added windows as "child surfaces" for every zone. And I created the adjacencies. No errors or whatsoever.
But from this point I cannot connect the model to any other component without GH being frozen. So although the model is correct maybe it is to heavy for the software, however I am not sure if that is the reason.
Is it stupid what I have done? Is there any easier way to accomplish my purpose?
Any thought or help will be much appreciated.
I attach the GH file.
Thank you,
Eduard
Version: HB 0.0.59 / LB 0.0.62…
understanding of the graphical algorithm editor, and then dive into more complex parametric models. We’ll also learn tricks to keep our project responsive and enjoyable to use.
Course outline
inspired in the first, visual programming part of the Grasshopper primer
(http://www.grasshopper3d.com/page/tutorials-1)
Duration: 3 days (24 hours).
Including
An understanding of the Grasshopper interface and the visual programming theory
Base parameters, large numbers of points and vectors, and small geometrical instances
Data flow
Troubleshooting definition problems and solutions
Know the main component types
Be able to join, and manage connections and trees
Expressions for both calculation and boolean creation
Understand Data Matching and casting
Managing long lists of objects within Grasshopper
Have an understanding of the functioning of Grasshopper components
Experience creating definitions
Parametric geometry examples, like attractors and list culling
Re-utilizable modeling examples: colored panelization, surface population, gradient and picture sampling and manipulation, catenary line and weaving
Spline animation examples
Getting ready to prepare own definitions in groups
More information...
…
dive into more complex parametric models. We’ll also learn tricks to keep our project responsive and enjoyable to use. Course outline
covering similar content as the first part of the primer (http://www.grasshopper3d.com/page/tutorials-1)
novel material
duration: 3 days (24 hours)
Including
An understanding of the Grasshopper interface and the visual programming theory
Base parameters, large numbers of points and vectors, and small geometrical instances
Data flow
Troubleshooting definition problems and solutions
Know the main component types
Be able to join, and manage connections and trees
Expressions for both calculation and boolean creation
Understand Data Matching and casting
Managing long lists of objects within Grasshopper
Have an understanding of the functioning of Grasshopper components
Experience creating definitions
Parametric geometry examples, like attractors and list culling
Re-utilizable modeling examples: colored panelization, surface population, gradient and picture sampling and manipulation, catenary line and weaving
Spline animation examples
Getting ready to prepare own definitions in groups
More information...
…
here are my questions.
1. The difference in general attractor transition is that, i only want the points are moving toward x axis, so if i just have ONE curve to distinguish, which is'nt the problem to find points location are in the right of left side of curve, but if i have TWO or THREE curves need to be distinguished, that is totally confused to me!
2. The points near curve which moved too big, how can i make it more equal?
3. I hope all the points can stay in the square boundary.
If anyone can give me some hint, i would be very appreciate with that.
thanks a lot!!
Shaun
…
ther math and logic. i can usually conceptualise what i want to do and cobble some semi working thing together but don't know which components to use and how to patch it. so i'm super happy to have someone who knows what he's doing to find this interesting.
and i'm glad you mention the fanned frets again, there is one input parameter that's still missing for the multiscale frets to be fully parametric, it's the angle of the nut or which fret should be straight. it depends a bit on personal preferences and playing posture what is more comfortable. so being able to adjust this easily would be cool. again i have no idea how the maths for that work or if you can just rotate each fret the same amount around it's middle point. The input either as fret number (for the straight fret) or as a simple slider from bridge to nut should do as input setting.
Here are the two extremes and the middle ground:
i've been thinkin today while analysing your patches and cleaning up my mess what exactly the monster should do.
Here are the input parameters needed, i think it's the complete list
scale length low E string
scale length high e string
fret angle/straight fret
string width at nut
string width at bridge
number of frets
fretboard overhang at nut (distance from string to fretboard bounds)
fretboard overhang at last fret
string gauges
string tensions
fretboard radius at nut (for compound radius fretboard radius at bridge is calculated with the stewmac formula)
fretwire crown width
fretwire crown height
action height at nut (distance between bottom of string and fretwire crown top)
action height at last fret
pickup 1 neck position
pickup 2 middle position
pickup 3 bridge position
nut width
the pickup positions should be used to draw circles for the magnet poles on each string so they are perfectly aligned and can be used for the pickup flatwork construction. ideally they would need a rotation control aligning the center line of the pickup so it's somewher between the last fret angle and bridge angle. personally i do this visually depending on the design i'm looking for, some people have huge theories on pickup positioning but personally i don't believe in it.
that should result in everything needed to quickly generate all the necessary construction curves or geometry for nut/fingerboard/frets/pickups. this is the core of what makes a guitar work, the more precise this dynamic system is the better the guitar plays and sounds.
i posted another thread trying to understand how i could use datasets form spreadsheets,databse, csv to organize the input parameters. What would make sense for the strings for example is hook into a spreadsheet with the different string sets, i attached one for the d'Addario NYXL string line which basically covers all combos that make sense.
The string tension is an interesting one, and implmenting it would sure be overkill albeit super interesting to try. it should be possible to extrapolate from the scale length of each string what the tension for a given string gauge of that string would be so that you could say 'i want a fully balanced set' or 'heavy top light bottom) and it would calculate which SKU from d'addario would best match the required tension. All the strings listed in the spreadsheet are available as single strings to buy.
i'm trying to reorganize everything which helps me understand it. i just discovered the 'hidden wires' feature which is great since once i understood what a certain block does or have finished one of my own, i can get the wires out of the way to carry on undistracted. a bit risky to hide so many wires but it makes it so much easier not to get completely lost :-)
btw, the 'fanned fret' term is trademarked, some guy tried to patent it in the 80's which is a bit silly since it has been done for centuries. there is a level of sophistication above this as well, check out http://www.truetemperament.com/ and that really is something else. it really is astounding how superior the tuning is on those wigglefrets, the problem is that it's rather awkward for string bending and also you can't easily recrown or level the frets when they are used. …
e matching with a dedicated component which creates combinations of items. You can find the [Cross Reference] component in the Sets.List panel.
When Grasshopper iterates over lists of items, it will match the first item in list A with the first item in list B. Then the second item in list A with the second item in list B and so on and so forth. Sometimes however you want all items in list A to combine with all items in list B, the [Cross Reference] component allows you to do this.
Here we have two input lists {A,B,C} and {X,Y,Z}. Normally Grasshopper would iterate over these lists and only consider the combinations {A,X}, {B,Y} and {C,Z}. There are however six more combinations that are not typically considered, to wit: {A,Y}, {A,Z}, {B,X}, {B,Z}, {C,X} and {C,Y}. As you can see the output of the [Cross Reference] component is such that all nine permutations are indeed present.
We can denote the behaviour of data cross referencing using a table. The rows represent the first list of items, the columns the second. If we create all possible permutations, the table will have a dot in every single cell, as every cell represents a unique combination of two source list indices:
Sometimes however you don't want all possible permutations. Sometimes you wish to exclude certain areas because they would result in meaningless or invalid computations. A common exclusion principle is to ignore all cells that are on the diagonal of the table. The image above shows a 'holistic' matching, whereas the 'diagonal' option (available from the [Cross Reference] component menu) has gaps for {0,0}, {1,1}, {2,2} and {3,3}:
If we apply this to our {A,B,C}, {X,Y,Z} example, we should expect to not see the combinations for {A,X}, {B,Y} and {C,Z}:
The rule that is applied to 'diagonal' matching is: "Skip all permutations where all items have the same list index". 'Coincident' matching is the same as 'diagonal' matching in the case of two input lists which is why I won't show an example of it here (since we are only dealing with 2-list examples), but the rule is subtly different: "Skip all permutations where any two items have the same list index".
The four remaining matching algorithms are all variations on the same theme. 'Lower triangle' matching applies the rule: "Skip all permutations where the index of an item is less than the index of the item in the next list", resulting in an empty triangle but with items on the diagonal.
'Lower triangle (strict)' matching goes one step further and also eliminates the items on the diagonal:
'Upper Triangle' and 'Upper Triangle (strict)' are mirror images of the previous two algorithms, resulting in empty triangles on the other side of the diagonal line:
…
ake a modest notice about the two new Ladybug components, one of which creates a 3d terrain shading mask and another one which visualizes and exports horizon angles. A terrain shading mask is essentially a diagram which maps the silhouette of the surrounding terrain (hills, valleys, mountains, tree tops...) around the chosen location, and account for the shading losses from the terrain. It can be used as a context_ input in mountainous or higher latitude regions for any kind of sun related analysis: sunlight hours analysis, solar radiation analysis, view analysis, photovoltaics/solar water heating sunpath shading...
My home town is an example of the shading caused by the terrain. Here is how it looks from the tallest building in the town:
And the created terrain shading mask:
A mask for any land location up to 60 degrees North can be created:
There will also be a support for a few major cities above this limit.
Both Terrain shading mask and Horizon angles components can be downloaded from here. An example .gh file can be found in here.
Component will prompt the user to download and copy certain files in order to be able to run.
It was created with assistance from Dr. Bojan Savric. Support on various issues was further given by: Dr. Graham Dawson, Dr. Alec Bennett, Dr. Ulrich Deuschle, Andrew T. Young, LiMinlu, Jonathan de Ferranti, Michal Migurski, Christopher Crosby, Even Rouault, Tamas Szekeres, Izabela Spasic, Mostapha Sadeghipour Roudsari, Dragan Milenkovic, Chen Weiqing, Menno Deij-van Rijswijk and gis.stackexchange.com community.
I hope somebody might find the components useful.…